在R Shiny App中调用来自反应数据()的变量

时间:2013-07-02 09:18:32

标签: r shiny

我想在反应式表达式中调用某个变量。像这样:

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
})
})

很遗憾,我无法了解如何在asc_new1内拨打asc_new2data()。这个不起作用:

data()$asc_new1

2 个答案:

答案 0 :(得分:9)

Reactive就像R中的其他函数一样。你不能这样做:

f <- function() {
  x <- 1
  y <- 2
}

f()$x

所以你在output$Plot()内的内容也无效。您可以通过从data()返回列表来执行您想要的操作。

data <- reactive({

  inFile <- input$test 
  asc <- raster(inFile$datapath) 
  list(asc_new1 = 1/asc, asc_new2 = asc * 100)

}) 

现在你可以做到:

data()$asc_new1

答案 1 :(得分:0)

&#34;使用data()$asc_new1,您将无法访问reactive上下文创建的变量(至少使用当前的闪亮版本)。 如果您将其放在像MadScone这样的列表中,则需要data()[1] data()[2]。使用$符号调用它会引发

  

警告:观察者中出现未处理的错误:$ operator对原子向量无效

然而,你得到的错误

  

data()中的错误$ fitnew:$ S4未定义此类

不仅是因为您访问变量错误。您将reactive函数data的输出命名为R中的保留名称。您想将其更改为myData或其他内容。