Reactives:赋值的左侧无效(NULL)

时间:2016-03-03 10:22:19

标签: r shiny

我试图提取名为tests.stats()的个人函数的输出

我用return语句创建一个函数:

   return(c(list.test.1, list.test.2 ,list.test.3, list.test.4))

每个list.test.<i>都是list个对象。

在Shiny Server中:

 outlist() <- reactive({
   if(is.null(input$datafile)){
     return()
   }
   if(is.null(input$varinteret)
      &&is.null(input$vartemps)
      &&is.null(input$varsujet)
      &&is.null(input$varprod) 
      &&is.null(input$apparie)
      &&is.null(input$tempsrefouinon)
      &&is.null(input$prodrefouinon)
      &&is.null(input$checkprod)
      &&is.null(input$checkprodref)){
     return()
   } else {
     data<-filedata()
     res <- tests.stats(data = data(),
              y = input$varinteret, 
              group = input$varprod, 
              group2 = input$vartemps, 
              sujet = input$varsujet, 
              apparie = input$apparie, 
              temoin = input$prodrefouinon, 
              TemoinName = input$checkprodref)
   }  

和错误消息:

Warning: Error in <-: invalid (NULL) left side of assignment
Stack trace (innermost first):
    40: server [C:\Users\itm\Desktop\Documents\appli/server.R#357]
     1: shiny::runApp
Error in outlist() <- reactive({ : invalid (NULL) left side of assignment

为什么我收到此错误?

1 个答案:

答案 0 :(得分:9)

这是因为这项任务的发生:

outlist() <- reactive({...})

这是不正确的语法,因为您告诉Shiny outlist是已定义的反应式表达式,您应该对其进行评估。然后,您尝试使用Shiny不理解的语法为此反应式表达式分配内容。

因此,如果您改为使用:

outlist <- reactive({...})

您现在已经正确地将outlist定义为可以在代码中的其他地方使用outlist()调用的反应性Shiny对象。

这个主题的文档非常好,可以在这里找到:

http://shiny.rstudio.com/reference/shiny/latest/reactive.html

http://shiny.rstudio.com/tutorial/lesson6/

您似乎也可以使用validateneed来处理需要输入的海洋:

http://shiny.rstudio.com/articles/validation.html

还有哈德利勋爵的代码风格指南:

http://adv-r.had.co.nz/Style.html