【问题标题】:setting up for loop in shiny在闪亮中设置for循环
【发布时间】:2019-04-21 19:36:56
【问题描述】:

我正在编写一个简单的闪亮应用程序。我正在尝试计算如下所示的几个变量的 CV。

 std1_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-01") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std2_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-02") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std3_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-03") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std4_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-04") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std5_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-05") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std6_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-06") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})

然后我想检查是否满足 CV 小于 0.065 的条件。所以我创建了一个结果向量。

std_cv<-reactive({c(std1_cv(), std2_cv(), std3_cv(), std4_cv(), std5_cv(), std6_cv())})

到目前为止一切顺利。我想为每个元素设计一个 for 循环来创建一个新的逻辑向量:

std_cv3 <- reactive({c()
for(std in std_cv()){
std <- c()
if(as.numeric(std_cv()[1]) < 0.065){
  std_cv3()<-TRUE
}
else{std_cv3()<-FALSE}
}

})

问题是这似乎不起作用。我收到一条消息:

错误:赋值左侧无效(NULL)

坦率地说,我很茫然,这是我的第一个闪亮的应用程序。我对此很陌生,我怀疑这个令人尴尬的难题可能有一个简单的答案。更尴尬的是,过去48小时我一直在这样做,我已经失去了所有希望。有什么建议么?谢谢你的帮助

【问题讨论】:

    标签: r for-loop shiny


    【解决方案1】:

    您可以避免循环,因为 &lt; 是矢量化的。

    std_cv3 <- reactive({
      std_cv() < 0.065
    })
    

    【讨论】:

    • 谢谢威尔。这确实很有帮助。
    【解决方案2】:

    您不能将值存储在反应式表达式本身中。

    c() <- 1 # does not work
    
    c <- c()
    c <- 1 # does work
    

    这样的东西应该可以工作

    std_cv3 <- reactive({
      std_cv3 <- std_cv3()
    
      for(std in std_cv()){
        std <- c()
        if(as.numeric(std_cv()[1]) < 0.065){
          std_cv3<-TRUE
        }
        else{std_cv3<-FALSE}
      }
      std_cv3
    }) 
    

    您必须在最后一行使用 write std_cv3,因为将返回反应式表达式中的最后一个变量。

    正如评论中所说,我不建议使用名为 c() 的反应式表达式,因为 c() 在 R 中保留为组合函数,可能会导致意外行为。始终使用类似“std_result_1”这样的变量来解释预期结果

    【讨论】:

    • 在使用 cc() 作为反应值/表达式的示例时,我会非常小心,因为 c() 已经是基础 r 中的一个函数,并且可能导致命名空间冲突的数量。
    • 感谢您的 cmets。您的反馈帮助很大:)
    • 如果我们的回答对您有帮助,请不要忘记给我们点赞 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多