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

Maï*_*rat 5 r shiny

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

我用return声明创建了一个函数:

   return(c(list.test.1, list.test.2 ,list.test.3, list.test.4))
Run Code Online (Sandbox Code Playgroud)

每个人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)
   }  
Run Code Online (Sandbox Code Playgroud)

和错误消息:

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
Run Code Online (Sandbox Code Playgroud)

为什么我收到此错误?

mle*_*gge 9

发生这种情况是因为这项任务:

outlist() <- reactive({...})
Run Code Online (Sandbox Code Playgroud)

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

因此,如果您改为使用:

outlist <- reactive({...})
Run Code Online (Sandbox Code Playgroud)

您现在已经正确地将其定义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