Originally posted in Stack Overflow (link)
I know R projects are not meant to be created in network drives, and I definitely will learn how to use Git properly because of this problem described below. But avoiding the problem itself is easy; I would like to know its cause, and if possible, why exactly it is dangerous to use RStudio and Google Drive Desktop together.
Problem description
In R 4.3.0, an 'experimental feature' has been added for the native pipe (|>
) placeholder (_
):
As an experimental feature the placeholder _ can now also be used in the rhs of a forward pipe |> expression as the first argument in an extraction call, such as _$coef. More generally, it can be used as the head of a chain of extractions, such as _$coef[[2]]. (link)
This syntax works well except when used inside a shiny app. Below is an example code of no practical use:
library(shiny)
ui <- fluidPage(
selectizeInput('col', 'Select column to view', choices = names(mtcars)),
tableOutput('table')
)
server <- function (input, output, session) {
output$table <- renderTable(mtcars |> _[[input$col]][1:10])
}
shinyApp(ui = ui, server = server)
Launch the app by clicking 'Run App' in RStudio then change the focus back to RStudio, and the app will immediately close (*). Try the same thing in an R project located in a network drive (e. g., Google drive desktop in my case) and additional anomalies can be observed: clicking on 'Run App' variably results in either the app launching successfully, nothing happening, or an unresponsive gray window appearing.
What I tried
The phenomenon does not occur when the new syntax is replaced with the old mtcars[[input$col]]
, or the Shiny app is launched from the R terminal, not RStudio. Also, as mentioned above, when the app is located in a local folder, only phenomenon (*) occurs and the more peculiar anomalies cannot be seen.
What I want to know
Avoiding the problem is easy; I just have to either quit using RStudio to access remotely located projects, or simply paraphrase the relevant sections of code. I have heard it is bad practice to use RStudio together with Google Drive Desktop, but I would like to know what exactly is going on here.
Also, phenomenon (*) can be reproduced even in local projects. Although it is innocuous, it is certainly unusual. So I suspect that working with a remote RStudio project is not entirely responsible for the problem, and there is some genuine mismatch between Shiny and the new placeholder syntax.
What I observed
The problem is not dependent on the relevant code being executed. Placing the following code inside renderTable()
of the above example produces the same phenomena.
if (TRUE) {
mtcars[[input$col]][1:10]
} else {
mtcars |> _[[input$col]][1:10]
}
The phenomenon is extremely variable. I tried set.seed()
but the outcome of pressing 'Run App' does not seem to depend on the seed. I managed to coax out the following error message after many iterations, but cannot comprehend the meaning.
Error in base::suppressWarnings(base::try("_"[[input$col]], silent = TRUE)) :
invalid use of pipe placeholder (<input>:1:0)
Warning: stack imbalance in '<-', 37 then 32
Warning: stack imbalance in '{', 33 then 28
Listening on http://127.0.0.1:6972
Session info
> sessionInfo()
R version 4.3.0 (2023-04-21 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=Korean_Korea.utf8 LC_CTYPE=Korean_Korea.utf8 LC_MONETARY=Korean_Korea.utf8
[4] LC_NUMERIC=C LC_TIME=Korean_Korea.utf8
time zone: Asia/Seoul
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] shiny_1.7.4
loaded via a namespace (and not attached):
[1] digest_0.6.31 later_1.3.1 R6_2.5.1 httpuv_1.6.11 fastmap_1.1.1 magrittr_2.0.3
[7] cachem_1.0.8 memoise_2.0.1 htmltools_0.5.5 lifecycle_1.0.3 promises_1.2.0.1 cli_3.6.1
[13] xtable_1.8-4 sass_0.4.6 jquerylib_0.1.4 withr_2.5.0 compiler_4.3.0 rstudioapi_0.14
[19] tools_4.3.0 bslib_0.4.2 ellipsis_0.3.2 mime_0.12 Rcpp_1.0.10 jsonlite_1.8.4
[25] rlang_1.1.1