knitr cannot find pdflatex when creating pdf from shiny app - r

I am trying to create a shiny App that offers users a choice of canned reports from a database that renders reactively, and then offers users the option to download a pdf of their desired report. I am running into trouble getting knitr to discover pdflatex to make the pdf. I originally tried using MikTex, but on advice of other posts removed MikTex and instead used tinytex. I followed the guidance here: https://yihui.org/tinytex/r/#debugging. The shiny app works fine, but when I click the download button, R initially starts the process of compiling, but once I click save when the dialog button launches, R throws this error (I include the verbose output as suggested by Yuhui Xie - the tinytex package author):
processing file: Reports.Rmd
|.................. | 25%
ordinary text without R code
|.................................... | 50%
label: unnamed-chunk-1
|...................................................... | 75%
ordinary text without R code
|........................................................................| 100%
label: unnamed-chunk-2
output file: Reports.knit.md
"C:/Program Files/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS Reports.utf8.md --to latex --from markdown+autolink_bare_uris+tex_math_single_backslash --output pandoc5ac42d2964ee.tex --lua-filter "C:\Users\SCMCKENZIE\Documents\R\win-library\4.0\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\SCMCKENZIE\Documents\R\win-library\4.0\rmarkdown\rmarkdown\lua\latex-div.lua" --self-contained --highlight-style tango --pdf-engine xelatex --variable graphics --variable "geometry:margin=1in"
Warning: Error in : LaTeX failed to compile C:\Users\SCMCKE~1\AppData\Local\Temp\Rtmp0a6jRk\file5ac45df413ce.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips.
[No stack trace available]
Here is my SessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] plyr_1.8.6 rmarkdown_2.6 knitr_1.29
[4] tmap_3.3 rgeos_0.5-3 sp_1.4-1
[7] sf_0.9-7 xtable_1.8-4 readr_1.4.0
[10] shinydashboard_0.7.1 odbc_1.2.3 DBI_1.1.0
[13] shiny_1.5.0
loaded via a namespace (and not attached):
[1] Rcpp_1.0.5 lattice_0.20-41 png_0.1-7 class_7.3-17
[5] digest_0.6.25 mime_0.9 R6_2.4.1 evaluate_0.14
[9] e1071_1.7-3 pillar_1.4.6 rlang_0.4.7 rstudioapi_0.11
[13] raster_3.3-13 blob_1.2.1 stringr_1.4.0 htmlwidgets_1.5.1
[17] bit_1.1-15.2 tinytex_0.29 compiler_4.0.2 httpuv_1.5.4
[21] xfun_0.20 pkgconfig_2.0.3 tmaptools_3.1-1 base64enc_0.1-3
[25] htmltools_0.5.0 tidyselect_1.1.0 tibble_3.0.3 codetools_0.2-16
[29] XML_3.99-0.4 viridisLite_0.3.0 crayon_1.3.4 dplyr_1.0.0
[33] later_1.1.0.1 grid_4.0.2 jsonlite_1.7.0 lwgeom_0.2-5
[37] lifecycle_0.2.0 magrittr_1.5 units_0.6-7 KernSmooth_2.23-17
[41] stringi_1.4.6 promises_1.1.1 leafsync_0.1.0 leaflet_2.0.4.1
[45] ellipsis_0.3.1 generics_0.0.2 vctrs_0.3.2 RColorBrewer_1.1-2
[49] tools_4.0.2 dichromat_2.0-0 bit64_0.9-7 leafem_0.1.3
[53] glue_1.4.1 purrr_0.3.4 hms_0.5.3 crosstalk_1.1.0.1
[57] abind_1.4-5 parallel_4.0.2 fastmap_1.0.1 yaml_2.2.1
[61] stars_0.5-1 classInt_0.4-3
I have ensured that I have selected my Global Options in RStudio to use knitr and pdflatex. Sys.which('pdflatex') gives me:
pdflatex
"C:\\Users\\SCMCKE~1\\AppData\\Roaming\\TinyTeX\\bin\\win32\\pdflatex.exe"
And tinytex::tlmgr_conf() gives me:
tlmgr conf
=========================== version information ==========================
tlmgr revision 57424 (2021-01-15 03:30:58 +0100)
tlmgr using installation: C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX
TeX Live (https://tug.org/texlive) version 2020
==================== executables found by searching PATH =================
PATH: C:\Users\SCMCKE~1\AppData\Roaming\TinyTeX\tlpkg\tlperl\bin;C:\Users\SCMCKE~1\AppData\Roaming\TinyTeX\bin\win32;C:\rtools40\usr\bin;C:\Program Files\R\R-4.0.3\bin\x64;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files\Microsoft MPI\Bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\150\DTS\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\SCMCKENZIE\AppData\Roaming\TinyTeX\bin\win32;C:\Users\SCMCKENZIE\AppData\Local\Microsoft\WindowsApps;C:\Users\SCMCKENZIE\AppData\Local\Programs\MiKTeX\miktex\bin\x64
dvipdfmx: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/dvipdfmx.EXE
dvips: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/dvips.EXE
fmtutil: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/fmtutil.EXE
kpsewhich: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/kpsewhich.EXE
luatex: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/luatex.EXE
mktexpk: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/mktexpk.EXE
pdftex: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/pdftex.EXE
tex: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/tex.EXE
tlmgr: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/tlmgr.BAT
updmap: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/updmap.EXE
xetex: C:/Users/SCMCKE~1/AppData/Roaming/TinyTeX/bin/win32/xetex.EXE
=========================== active config files ==========================
config.ps: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/dvips/config/config.ps
fmtutil.cnf: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/fmtutil.cnf
mktex.cnf: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/mktex.cnf
pdftexconfig.tex: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex
texmf.cnf: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf.cnf
texmf.cnf: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/texmf.cnf
updmap.cfg: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist/web2c/updmap.cfg
============================= font map files =============================
kanjix.map: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/dvipdfmx/updmap/kanjix.map
pdftex.map: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/pdftex/updmap/pdftex.map
ps2pk.map: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/dvips/updmap/ps2pk.map
psfonts.map: c:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts/map/dvips/updmap/psfonts.map
=========================== kpathsea variables ===========================
ENCFONTS=.;{C:/PROGRA~1/R/R-40~1.2/share/texmf,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/fonts/enc//
SYSTEXMF=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var;C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local;C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist
TEXCONFIG={C:/PROGRA~1/R/R-40~1.2/share/texmf,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/dvips//
TEXFONTMAPS=.;{C:/PROGRA~1/R/R-40~1.2/share/texmf,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/fonts/map/{kpsewhich,pdftex,dvips,}//
TEXMF={C:/PROGRA~1/R/R-40~1.2/share/texmf,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}
TEXMFCONFIG=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config
TEXMFDBS={!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}
TEXMFDIST=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist
TEXMFHOME=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local
TEXMFLOCAL=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local
TEXMFMAIN=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist
TEXMFSYSCONFIG=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config
TEXMFSYSVAR=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var
TEXMFVAR=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var
TEXPSHEADERS=.;{C:/PROGRA~1/R/R-40~1.2/share/texmf,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/{dvips,fonts/{enc,type1,type42,type3}}//
VARTEXFONTS=C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var/fonts
WEB2C={C:/PROGRA~1/R/R-40~1.2/share/texmf,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-local,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-config,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-var,!!C:/Users/SCMCKENZIE/AppData/Roaming/TinyTeX/texmf-dist}/web2c
==== kpathsea variables from environment only (ok if no output here) ====
In case it is a matter of my coding, below is a reproducible R script:
##Loading Necessary Packages
library(shiny)
library(shinydashboard)
library(rmarkdown)
library(knitr)
library(plyr)
##Getting data for reproducibility
data("iris")
data("airquality")
names(airquality)[5]<-"Species"#To allow for using the same plyr code in server function on both data sets
####Creating Shiny App####
##User Interface
ui<-dashboardPage(
dashboardHeader(title="FAKE SHINY APPLICATION"),
dashboardSidebar(
sidebarMenu(tabName="REPORTS",
menuItem("OPTIONS", tabName = "SOME MENU OPTIONS",
radioButtons(inputId = "REPORT", label = "Select Something", choices = c("Iris", "AQ")),
downloadButton(outputId = "DWNLD", "Download Report")
)
)
),
dashboardBody(
tableOutput(outputId = "TABLE"),
plotOutput(outputId = "PLOT")
)
)
##Server Function##
server<-function(input, output){
##Reactive Plot##
output$PLOT<-renderPlot({
RPT<-list(Iris = iris, AQ = airquality)
DF<-RPT[[input$REPORT]]
pairs(DF[,c(1:4)])})
##Reactive Table##
output$TABLE<-renderTable({
RPT<-list(Iris = iris, AQ = airquality)
DF<-RPT[[input$REPORT]]
rpt_tbl<-ddply(DF, "Species", colwise(mean))
xtable(rpt_tbl)
})
##Download As PDF##
output$DWNLD<-downloadHandler(
filename=paste(input$REPORT, "pdf", sep="."),
content<-function(file){
RPT<-list(iris, airquality)
names(RPT)<-c("Iris", "AQ")
tmp<-file.path(tempdir(), "Reports.Rmd")
file.copy(paste(getwd(),"Reports.Rmd", sep="/"), tmp, overwrite=TRUE)
params<-list(DF
rmarkdown::render(tmp, output_file = file,
params = params,
envir = new.env(parent = globalenv()
))#End render
}
)
}
##Launch Shiny App##
shinyApp(ui=ui, server = server)
And here is the script for the Rmarkdown document saved as Reports.Rmd:
---
title: "FAKE REPORT"
output: pdf_document
params:
DF: NA
---
Fake Report Output
```{R}
rpt_tbl<-ddply(params$DF, "Species", colwise(mean))
xtable(rpt_tbl)
```
More Fake Output
```{R}
pairs(params$DF[,c(1:4)])
```
I have scoured Stack Overflow and RStudio answers, but haven't found any that seem to be my problem. Part of me is wondering if this is a platform issue. Any help would be much appreciated. Thanks so much.
Take Care,
-Sean

After much searching and testing, I found out that the problem was not with tinytex or pdflatex, but rather my call to rmarkdown::render() That led me to this answer on GitHub https://github.com/rstudio/shiny/issues/1831. Apparently, when rmarkdown::render() is called within downloadHandler(), you should NOT specify the output_file argument in render() Instead you need to rename the file AFTER rendering.
Here is the correct code (simply replace the call to downloadHandler() in the script from my original question.
output$DWNLD<-downloadHandler(
filename=paste0(input$REPORT, ".pdf"),
content<-function(file){
RPT<-list(iris, airquality)
names(RPT)<-c("Iris", "AQ")
tmp <- file.path(tempdir(), "Reports.Rmd", fsep="\\")
file.copy("F:/Apps/DNR_TRIS/Shiny_report_scripts/SQL_SCRIPTS/Reports.Rmd", tmp, overwrite = TRUE)
out<-RPT[[input$REPORT]]
params<-list(out)
names(params)<-"DF"
out<-rmarkdown::render(tmp,
params = params,
envir = new.env(parent = globalenv()
))#End render
file.rename(out, file)
}
)

Related

Shiny's ActionButton not responding

I can't seem to manage to get the action button in shiny working. Nothing happens when i press "click me" and there is no error message.
Does anyone have a clue what might be wrong?
library(shiny)
ui <- fluidPage(
tags$head(tags$script(src = "message-handler.js")),
actionButton("do", "Click Me")
)
server <- function(input, output, session) {
observeEvent(input$do, {
session$sendCustomMessage(type = 'testmessage',
message = 'Thank you for clicking')
})
}
shinyApp(ui, server)
here is my session info:
> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19043)
Matrix products: default
locale:
[1] LC_COLLATE=Swedish_Sweden.1252 LC_CTYPE=Swedish_Sweden.1252 LC_MONETARY=Swedish_Sweden.1252 LC_NUMERIC=C LC_TIME=Swedish_Sweden.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] shiny_1.4.0.2
loaded via a namespace (and not attached):
[1] Rcpp_1.0.6 packrat_0.5.0 digest_0.6.27 later_1.1.0.1 mime_0.9 R6_2.5.0 xtable_1.8-4 jsonlite_1.7.2 magrittr_2.0.1
[10] rlang_0.4.10 promises_1.1.0 tools_3.6.3 httpuv_1.5.2 rsconnect_0.8.16 fastmap_1.0.1 compiler_3.6.3 htmltools_0.5.1.1

RStudio Server on linux: how to create a shiny app that immediately returns user input text if button OK pressed, or FALSE if button CANCEL pressed

I want my function to implement a dialog with an editable text box using a shiny app.
I.e. calling the function should open a shiny app displaying some text for the user to edit, then press the 'Ok' button to close the app and return the edited text or the 'Cancel' button to close the app and return an empty character vector.
My code runs fine on Windows (Rstudio desktop).
However on Linux (Rstudio Server Pro) the shiny page is displayed but the interface seems to be greyed, the text can be edited but the buttons are not responsive. Why?
--EDIT--
The unresponsiveness problem occurs with Internet Explorer and Microsoft Edge, not Chrome. Although the page in Chrome is greyed too, and opening Chrome's 'Inspect' tool shows 2 errors:
(1) shinyapp.js:83 WebSocket connection to 'wss://XXXXXXXXXXXXXXX/websocket/' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET
(2) Uncaught TypeError: Cannot read property 'readyState' of null
at ShinyApp.$sendMsg (shiny.min.js:3)
at ShinyApp.sendInput (shiny.min.js:3)
at InputBatchSender.$sendNow (shiny.min.js:3)
[where XXXXXXXXXXXXXXX stands for my Rstudio Server's URL]
library(shiny)
getMyText <- function(default = "This is my input\n- Anonymous") {
require(stringr)
ui <- fluidPage(
textAreaInput("myTextBox", "Edit text", paste(default, collapse="\n"),
width = "600px", height = "400px"),
actionButton("okBtn", "Ok"),
actionButton("cancelBtn", "Cancel")
)
server <- function(input, output) {
observe({
if(input$cancelBtn > 0){
stopApp(character(0))
}
});
observe({
if(input$okBtn > 0){
stopApp(unlist(str_split(input$myTextBox, "\n")))
}
});
}
return(runApp(list(ui = ui, server = server)))
}
args <- getMyText()
sessionInfo:
sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server 7.4 (Maipo)
Matrix products: default
BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8
[6] LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] stringr_1.3.1 shiny_1.4.0.2
loaded via a namespace (and not attached):
[1] Rcpp_1.0.4 digest_0.6.18 later_1.0.0 mime_0.6 R6_2.4.1 xtable_1.8-3 magrittr_1.5 rlang_0.4.5
[9] stringi_1.1.7 promises_1.1.0 tools_3.5.0 httpuv_1.5.2 yaml_2.2.0 fastmap_1.0.1 compiler_3.5.0 htmltools_0.4.0
>
The greyed out screen to me sounds like your observe block is firing before all inputs are set up. This can be remedied in two ways:
observe({
req(input$cancelBtn)
if (input$cancelBtn > 0) {
stopApp(character(0))
}
})
observeEvent(input$cancelBtn, {
if (input$cancelBtn > 0) {
stopApp(character(0))
}
}, ignoreNULL = TRUE) # which is the default, including it for clarity
FYI: win10, R-3.5.3, shiny-1.4.0
It turns out this problem was due to a server (mis)configuration.
Interestingly, I found out that setting option shiny.host to the IP address of the server (instead of the default 127.0.0.1) enabled interaction with the shiny app, e.g.:
options(shiny.host = '10.1.2.3')
The following code could be used to set this option dynamically on a Linux host, useful in case load balancing gets the user connected to one of several Rstudio servers:
if (Sys.info()["sysname"] == 'Linux') {
hostIP <- system("hostname -I | awk '{print $1}'", intern = TRUE)
options(shiny.host = hostIP)
}

Permission denied to write a table with dbWriteTable in RPostgreSQL

I've been trying to solve a problem with the RPostgreSQL package for quite some time. My code:
path_ene <- "C:/Users/omen03/ENE"
nene <- "ene_2010_02_efm.csv"
drv <- dbDriver("PostgreSQL")
con = dbConnect(drv, user="postgres", password="mypassword",
host="localhost", port=5432, dbname="ENE")
tn = "ene_2010_02_efm";
dbRemoveTable(con,tn);
dbWriteTable(conn = con, name = tn, value = paste0(path_ene,"/",nene),
sep = ",", overwrite = FALSE))
When executing the code described above, I throw the following error:
Error in postgresqlExecStatement (conn, statement, ...):   
RS-DBI driver: (could not Retrieve the result: ERROR:
Could not open file «C: /Users/omen03/ENE/ene_2010_02_efm.csv» for reading: Permission denied
HINT: COPY FROM tells the PostgreSQL server process to read a
file. You may want to use a client-side facility such as psql \ copy.
) In addition: Warning message: In postgresqlImportFile (conn, name,
value, ...):    could not load data into table
when I try without specifying the file path, it throws me another error
dbRemoveTable(con,tn);
dbWriteTable(conn = con, name = tn, value = nene),
sep = ",", overwrite = FALSE))
Error in postgresqlExecStatement (conn, statement, ...):    RS-DBI
driver: (could not Retrieve the result: ERROR: could not open file Â
«./ ene_2010_02_efm» for reading: No such file or directory
HINT:
COPY FROM tells the PostgreSQL server process to read a file. You may
want to use a client-side facility such as psql \ copy. ) In addition:
Warning message: In postgresqlImportFile (conn, name, value, ...):   
could not load data into table
Update:
Taking into account the error message, I decided to use sql directly to insert the csv values in each of the tables in the database. For that I used a couple of functions
createEmptyTable <- function(con,tn,df) {
sql <- paste0("create table \"",tn,"\" (",paste0(collapse=',','"',names(df),'" ',sapply(df[0,],postgresqlDataType)),");");
dbSendQuery(con,sql);
invisible();
};
Taken from: How to write a table in PostgreSQL from R?
and
#tn: Table name
#c_names: column names of each table (a list)
#source: The path to each csv files
insert_data = function(tn, source){
sql = paste0('COPY ',tn,' FROM \'',paste0(path_ene,'\\',source),'\' DELIMITER \',\' CSV HEADER')
dbSendQuery(con, sql);
}
insert_data(tn[1], paste0(path_ene, "/",nene[1]))
Anyway, I still get a very similar error.
Error in postgresqlExecStatement (conn, statement, ...):    RS-DBI
driver: (could not Retrieve the result: ERROR: Could not open file Â
«C: /Users/omen03/ENE/ene_2010_02_efm.csv» for reading: Permission
denied HINT: COPY FROM tells the PostgreSQL server process to read a
file. You may want to use a client-side facility such as psql \ copy.
)
My session info:
R version 3.6.1 (2019-07-05) Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
Matrix products: default
locale: [1] LC_COLLATE=Spanish_Chile.1252 LC_CTYPE=Spanish_Chile.1252
LC_MONETARY=Spanish_Chile.1252 LC_NUMERIC=C [5]
LC_TIME=Spanish_Chile.1252
attached base packages: [1] stats graphics grDevices utils
datasets methods base
other attached packages: [1] RPostgreSQL_0.6-2 DBI_1.0.0
foreign_0.8-71 captioner_2.2.3 kableExtra_1.1.0 wordcloud_2.6
tidytext_0.2.2 gridExtra_2.3 [9] gtable_0.3.0
readstata13_0.9.2 RColorBrewer_1.1-2 ggrepel_0.8.1 pbapply_1.4-2
srvyr_0.3.6 data.table_1.12.6 lubridate_1.7.4 [17]
stringi_1.4.3 forcats_0.4.0 stringr_1.4.0 dplyr_0.8.3
purrr_0.3.3 readr_1.3.1 tidyr_1.0.0 tibble_2.1.3
[25] ggplot2_3.2.1 tidyverse_1.3.0
loaded via a namespace (and not attached): [1] httr_1.4.1
jsonlite_1.6 viridisLite_0.3.0 splines_3.6.1 modelr_0.1.5
assertthat_0.2.1 cellranger_1.1.0 sessioninfo_1.1.1 [9]
pillar_1.4.3 backports_1.1.5 lattice_0.20-38 glue_1.3.1
digest_0.6.23 rvest_0.3.5 colorspace_1.4-1 htmltools_0.4.0
[17] Matrix_1.2-17 survey_3.36 pkgconfig_2.0.3 broom_0.5.2
haven_2.2.0 scales_1.1.0 webshot_0.5.2 generics_0.0.2
[25] withr_2.1.2 lazyeval_0.2.2 cli_2.0.0
survival_2.44-1.1 magrittr_1.5 crayon_1.3.4 readxl_1.3.1
evaluate_0.14 [33] tokenizers_0.2.1 janeaustenr_0.1.5 fs_1.3.1
fansi_0.4.0 nlme_3.1-140 SnowballC_0.6.0 xml2_1.2.2
tools_3.6.1 [41] hms_0.5.2 mitools_2.4
lifecycle_0.1.0 munsell_0.5.0 reprex_0.3.0 compiler_3.6.1
rlang_0.4.2 grid_3.6.1 [49] rstudioapi_0.10
rmarkdown_1.18 R6_2.4.1 knitr_1.26 zeallot_0.1.0
parallel_3.6.1 Rcpp_1.0.3 vctrs_0.2.1 [57]
dbplyr_1.4.2 tidyselect_0.2.5 xfun_0.11
Finally, I found the answer by looking for the problem of directly importing data into postgresql. It was enough to change the configuration of the folder containing the .csv files.
I reproduce this answer that was the one I finally used.
Right click the folder containing the data file(s) that permission was denied to and then click Properties.
In the Folder's Properties window, select the Security tab.
Click the Edit button. In the "Permissions for the folder" window that opened, click the Add... button.
Type Everyone into the "Enter the object names to select" text area box.
Click OK and the window will close.

Ajax Error with RStudio DT DataTables Package for Shiny App

The below Shiny app code below:
library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
fluidRow(
column(12, dataTableOutput('table'))
)
),
server = function(input, output) {
output$table <- DT::renderDataTable(iris)
}
)
triggers the error:
DataTables warning: table id=DataTables_Table_0 - Ajax error. For more information about this error, please see http://datatables.net/tn/7
using the packages:
R version 3.6.2 (2019-12-12)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Catalina 10.15.2, RStudio 1.2.5033
Locale: en_US.UTF-8 / en_US.UTF-8 / en_US.UTF-8 / C / en_US.UTF-8 / en_US.UTF-8
Package version:
assertthat_0.2.1 backports_1.1.5 base64enc_0.1.3 BH_1.72.0.3
cli_2.0.1 colorspace_1.4.1 crayon_1.3.4 crosstalk_1.0.0
digest_0.6.23 DT_0.11.3 ellipsis_0.3.0 fansi_0.4.1
farver_2.0.1 fastmap_1.0.1 ggplot2_3.2.1 glue_1.3.1
graphics_3.6.2 grDevices_3.6.2 grid_3.6.2 gtable_0.3.0
htmltools_0.4.0.9002 htmlwidgets_1.5.1 httpuv_1.5.2 jsonlite_1.6
labeling_0.3 later_1.0.0 lattice_0.20.38 lazyeval_0.2.2
lifecycle_0.1.0 magrittr_1.5 MASS_7.3.51.4 Matrix_1.2.18
methods_3.6.2 mgcv_1.8.31 mime_0.8 munsell_0.5.0
nlme_3.1.142 pillar_1.4.3 pkgconfig_2.0.3 plyr_1.8.5
promises_1.1.0 R6_2.4.1 RColorBrewer_1.1.2 Rcpp_1.0.3
reshape2_1.4.3 rlang_0.4.2 scales_1.1.0 shiny_1.4.0.9001
sourcetools_0.1.7 splines_3.6.2 stats_3.6.2 stringi_1.4.5
stringr_1.4.0 tibble_2.1.3 tools_3.6.2 utf8_1.1.4
utils_3.6.2 vctrs_0.2.1 viridisLite_0.3.0 withr_2.1.2
xtable_1.8.4 yaml_2.2.0 zeallot_0.1.0
with Chrome 79.0.3945. This is using the latest development packages for shiny and DT after the CRAN packages did not seem to work.
Is there a workaround to this problem?
Updating to the GitHub master versions of the two suggested packages (htmlwidgets and jsonlite) seems to have worked as suggested on GitHub: https://github.com/rstudio/DT/issues/758
Use server=False
As in:
output$tbl <- DT::renderDT(iris, server = FALSE)
Source: https://github.com/rstudio/DT/issues/642

RMarkdown and knitting in Armenian

Thanks in advance for the help. I am trying to parametrically knit an RMD file into PDFs and HTMLs of different languages; one of them is Armenian. Knitting the Armenian version to any kind of format always produces literal UTF entities, like <U+0553><U+0578><U+0580><U+0571><U+0561><U+057C><U+0578>.
The .tex files are rendered as follows: \textless U+0553\textgreater\textless U+0578\textgreater\textless U+0580\textgreater\textless U+0571\textgreater
I have also tried using XeLaTeX and setting the main font to DejaVu Sans (i.e. latex_engine: xelatex and mainfont: DejaVu Sans), but it still knits the Armenian characters as Unicode literals.
I edited the XeTex .tex output and put in Armenian characters, and it worked fine. If Pandoc/RMD/Knitr didn't convert the characters to literals, then everything would work pefectly fine.
Even the .knit.md file already has the Unicode literals, so the problem is high up in the knitting chain, and I am not sure why this might be.
Any help would be appreciated.
Here's my minimal document (LuaLaTeX):
---
title: "Test Doc"
author: "Document"
output:
html_fragment:
section_divs: no
pdf_document:
latex_engine: lualatex
geometry: margin = 2cm
params:
lang: yes
lang: "`r switch(params$lang, CY = 'cy-GB', EN = 'en-GB', HY = 'hy-AM')`"
knit: (function(inputFile, encoding){ files <- c("cv-cy", "cv-en", "cv-hy"); langs <- c(list(lang = "CY"), list(lang = "EN"), list(lang = "HY")); i <- 1; for(f in files){ rmarkdown::render(inputFile, output_format = c("html_fragment", "pdf_document"), encoding = encoding, params = langs[i], output_file = c(paste0(dirname(inputFile), "/", print(f)), paste0(dirname(inputFile), "/", print(f)))); i <- i +1 } })
---
```
{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
lswitch <- function(lang, ...){
switch(lang, ..., stop(""))
}
```
`r lswitch(params$lang,
CY = "# Enw",
EN = "# Name",
HY = "# Անում"
)
`
Here's the pertinent section in the .log for the LuaLaTeX build:
) (d:/texlive/texmf-dist/tex/generic/babel/babel.sty
Package: babel 2019/05/04 3.31 The Babel package
(d:/texlive/texmf-dist/tex/generic/babel/switch.def
File: switch.def 2019/05/04 3.31 Babel switching mechanism
) (d:/texlive/texmf-dist/tex/generic/babel/luababel.def
\l#dumylang=\language2
Package babel Info: Non-standard hyphenation setup on input line 114.
\l#nohyphenation=\language3
\l#german-x-2019-04-04=\language4
\l#ngerman-x-2019-04-04=\language5
\l#afrikaans=\language6
\l#ancientgreek=\language7
\l#ibycus=\language8
\l#arabic=\language9
\l#armenian=\language10
\l#basque=\language11
\l#belarusian=\language12
\l#bulgarian=\language13
\l#catalan=\language14
\l#pinyin=\language15
\l#churchslavonic=\language16
\l#coptic=\language17
\l#croatian=\language18
\l#czech=\language19
\l#danish=\language20
\l#dutch=\language21
\l#ukenglish=\language22
\l#usenglishmax=\language23
\l#esperanto=\language24
\l#estonian=\language25
\l#ethiopic=\language26
\l#farsi=\language27
\l#finnish=\language28
\l#french=\language29
\l#friulan=\language30
\l#galician=\language31
\l#georgian=\language32
\l#german=\language33
\l#ngerman=\language34
\l#swissgerman=\language35
\l#monogreek=\language36
\l#greek=\language37
\l#hungarian=\language38
\l#icelandic=\language39
\l#assamese=\language40
\l#bengali=\language41
\l#gujarati=\language42
\l#hindi=\language43
\l#kannada=\language44
\l#malayalam=\language45
\l#marathi=\language46
\l#oriya=\language47
\l#panjabi=\language48
\l#pali=\language49
\l#tamil=\language50
\l#telugu=\language51
\l#indonesian=\language52
\l#interlingua=\language53
\l#irish=\language54
\l#italian=\language55
\l#kurmanji=\language56
\l#latin=\language57
\l#classiclatin=\language58
\l#liturgicallatin=\language59
\l#latvian=\language60
\l#lithuanian=\language61
\l#mongolian=\language62
\l#mongolianlmc=\language63
\l#bokmal=\language64
\l#nynorsk=\language65
\l#occitan=\language66
\l#piedmontese=\language67
\l#polish=\language68
\l#portuguese=\language69
\l#romanian=\language70
\l#romansh=\language71
\l#russian=\language72
\l#sanskrit=\language73
\l#serbian=\language74
\l#serbianc=\language75
\l#slovak=\language76
\l#slovenian=\language77
\l#spanish=\language78
\l#swedish=\language79
\l#thai=\language80
\l#turkish=\language81
\l#turkmen=\language82
\l#ukrainian=\language83
\l#uppersorbian=\language84
\l#welsh=\language85
)
! Package babel Error: Unknown option `armenian'. Either you misspelled it
(babel) or the language definition file armenian.ldf was not fou
nd.
See the babel package documentation for explanation.
Type H <return> for immediate help.
...
l.533 \ExecuteOptions{\bbl#opt#main}
Session info:
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363), RStudio 1.2.5019
Locale:
LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252
LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
LC_TIME=English_United Kingdom.1252
Package version:
base64enc_0.1.3 digest_0.6.23 evaluate_0.14 glue_1.3.1 graphics_3.6.1 grDevices_3.6.1 highr_0.8
htmltools_0.4.0 jsonlite_1.6 knitr_1.26 magrittr_1.5 markdown_1.1 methods_3.6.1 mime_0.7
Rcpp_1.0.3 rlang_0.4.2 rmarkdown_1.18 stats_3.6.1 stringi_1.4.3 stringr_1.4.0 tinytex_0.17
tools_3.6.1 utils_3.6.1 xfun_0.11 yaml_2.2.0
Pandoc version: 2.7.2

Resources