从render *()中的反应函数调用变量

时间:2014-08-28 17:45:07

标签: r ggplot2 shiny

我有一个server.R文件,格式如下:

server.R

shinyServer(


  function(input, output, session) {    

    mydata<- reactive({
              df<- dataframe1
              variable1
              variable2
              list(df, variable1, variable2)

    })

  output$plot<- renderPlot({  

   p<-ggplot(mydata()$df, aes(y=V8, x = 1:nrow(mydata()$df), fill = V8))
   print(p)

   })
 })

我的问题是调用ggplot,虽然它似乎识别mydata $ df(),但它返回错误

nrow中的错误(mydata()$ df):找不到函数“mydata”

我不确定我的语法错在哪里。任何人都能解释一下吗?谢谢!

2 个答案:

答案 0 :(得分:1)

据我所知,反应性闪亮物体不适合列表。因为看起来你没有使用'variable1'和'variable2'只是省略它们而只是做数据帧(我假设它是全局可访问的并且没有导入?)。它也可以简单地在ggplot调用之前调用被动反应,但如果不使用那些额外的变量,我就会变得简单。一个非常简单的例子:

runApp(
  list(ui = basicPage(
    h1('Demo Shiny'),
    plotOutput("plot")
  )

  ,server = function(input, output) {
    mydata <- reactive({
      dataframe1 <- data.frame(cond = rep(c("A", "B"), each=10),
                               xvar = 1:20 + rnorm(20,sd=3),
                               yvar = 1:20 + rnorm(20,sd=3))
      dataframe1
    })

    output$plot = renderPlot({
      df <- mydata()
      p<-ggplot(df, aes(x=xvar, y = yvar)) + geom_point()
      print(p)
    })
  })
)

答案 1 :(得分:0)

我将无耻地窃取大部分@charles代码,但我认为这种情况下的问题实际上是你的aes()。这似乎有效

runApp(
  list(ui = basicPage(
    h1('Demo Shiny'),
    plotOutput("plot")
  )

  ,server = function(input, output) {
    mydata <- reactive({
            df <- data.frame( V8=sample(1:4, 20, replace=T))
            list(df=df, variable1=1, variable2=2)
    })

    output$plot = renderPlot({
      p<-ggplot(mydata()$df, aes(x=seq_along(V8), y = V8)) + geom_point()
      print(p)
    })
  })
)

问题是你的aes中的变量是你传递给ggplot2的data.frame中没有的。这里通过确保从df中包含一个适当的变量,我们似乎没问题。