6

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

服务器.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
4

2 回答 2

11

反应式就像 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
于 2013-07-02T14:17:24.760 回答
0

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

警告:观察者中未处理的错误:$ 运算符对原子向量无效

但是,您得到的错误

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

不仅是因为你访问变量错误。您将reactive函数的输出命名dataR. 你想把它改成myData什么。

于 2015-09-30T17:19:33.487 回答