可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I would like to call a certain variable within a reactive expression. Something like this:
server.R
library(raster) shinyServer(function(input, output) { data <- reactive({ inFile <- input$test #Some uploaded ASCII file asc <- raster(inFile$datapath) #Reads in the ASCII as raster layer #Some calculations with 'asc': asc_new1 <- 1/asc asc_new2 <- asc * 100 }) output$Plot <- renderPlot({ inFile <- input$test if (is.null(inFile) return (plot(data()$asc_new1)) #here I want to call asc_new1 plot(data()$asc_new2)) #here I want to call asc_new2 }) })
Unfortunately I could't find out how to call asc_new1 and asc_new2 within data(). This one doesn't work:
data()$asc_new1
回答1:
Reactives are just like other functions in R. You can't do this:
f <- function() { x <- 1 y <- 2 } f()$x
So what you're within output$Plot() won't work either. You can do what you want by returning a list from data().
data <- reactive({ inFile <- input$test asc <- raster(inFile$datapath) list(asc_new1 = 1/asc, asc_new2 = asc * 100) })
Now you can do:
data()$asc_new1
回答2:
"With data()$asc_new1 you wont be able to access the in the reactive context created variables (at least with the current shiny version). You need data()[1] data()[2] if you put it in a list like MadScone. Calling it with the $ sign would raise
Warning: Unhandled error in observer: $ operator is invalid for atomic vectors
However, the error your getting
Error in data()$fitnew : $ operator not defined for this S4 class
is not only because you access the variable wrong. You named the output of your reactive function data which is reserved name in R. You want to change that to myData or something.