设置闪亮的循环

时间:2019-04-21 19:36:56

标签: r for-loop shiny

我正在编写一个简单的闪亮应用程序。我正在尝试计算下面显示的几个变量的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个小时我一直在这里工作,我失去了所有希望。有什么建议么?谢谢您的帮助

2 个答案:

答案 0 :(得分:0)

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

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中保留为Combine函数,并可能导致意外行为。始终使用像“ std_result_1”之类的解释预期结果的变量

答案 1 :(得分:0)

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

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