2017-05-10 42 views
2

我有一个问题,插入一个闪亮的表中的值的向量。问题是它总是将矢量的最后一个条目保存到我尝试操纵的所有单元格中。 例如:闪亮的输出变量中的重复值

outValues <- c(368,331,334,443,348,324,608,376,354,706) 
stations <- c("Station_Electric_Testing_PLx","Station_Wall_Polishing", 
       "Station_Dicing_Grooving","Station_Coating", 
       "Station_Electric_Testing_PL","Station_PhotoLitho", 
       "Station_Face_Polishing","Station_Anealling", 
       "Station_CleaningAfter_45","Station_45_Cutting", 
       "Station_Kupelevitz") 

     for(stat in stations){ 
      i <- i+1 
      output[[paste0("Out_",stat)]] <- renderText({paste0(outValues[i])}) 
     } 

这个代码后,我的表中的所有值都是706

预先感谢您的帮助,

迈克尔

+0

检查这个帖子:http://stackoverflow.com/questions/43762513/r-shiny-bad-dependency-from- for-loop-variable-is-there-a-way-to-force-evaluatio and this discussion:https://github.com/rstudio/shiny/issues/532 – BigDataScientist

+0

我会将它标记为重复的,而不是我认为的其他问题很难找到,你问的方式仍然带来价值。 (请参阅此处https://meta.stackoverflow.com/a/292398/3502164) – BigDataScientist

+1

可能的重复[R对于循环变量发出不良依赖。有没有办法强制评估?](http://stackoverflow.com/questions/43762513/r-shiny-bad-dependency-from-for-loop-variable-is-there-a-way-to-force-评判的) – BigDataScientist

回答

1

这是一个有趣的问题,答案很复杂。基本上,你正在懒惰懒惰的评价,由此功能并没有真正评价,但一个所谓的“承诺”被存储,而不是评估。

浏览各种链接,你会看到各种解决方案,其中一些BigDataScientist指出(这是一个很大的帮助),一些是相关的,但也有一些是过时的。解决方法随着时间的推移也发生了变化 - 仅仅声明它是重复的就不能解决正义问题。

因此,下面是一个例子,它将您的代码的较小版本扩展为具有三种可能解决方案的实际示例。

  • 有4个可能的服务器功能,s0s1s2s3。您可以通过在最后一行(shinyApp(u,s0)调用)中更改该参数来切换它们。
  • s0是原始代码。 s1,s2,s3是链接中建议的三种可能的解决方法(也有其他几种,但这些是主要的)。
  • s1s3现在工作。我的理解是,s2(部队)工作和s3直到R版本3.2.0 - 但我没有3.2.0躺在检查。
  • 从版本3.2.0开始更改,导致s2停止工作,并且s3开始工作。
  • 我不明白为什么他们禁用force,似乎是有用的功能。
  • 这也意味着参考过去的链接可能有点毫无意义,你必须尝试一下,而且当他们在将来改变时不会感到惊讶。

    library(shiny) 
    outValues <- c(368,331,334,443) 
    stations <- c("Station_Electric_Testing_PLx","Station_Wall_Polishing", 
           "Station_Dicing_Grooving","Station_Coating") 
    u <- fluidPage(
        verbatimTextOutput("Out_Station_Electric_Testing_PLx"), 
        verbatimTextOutput("Out_Station_Wall_Polishing"), 
        verbatimTextOutput("Out_Station_Dicing_Grooving"), 
        verbatimTextOutput("Out_Station_Coating") 
    ) 
    s0 <- function(input,output,session){ 
        i <- 0 
        for(stat in stations){ 
        i <- i+1 
        output[[paste0("Out_",stat)]] <- renderText({outValues[i]}) 
        } 
    } 
    s1 <- function(input,output,session){ 
        i <- 0 
        for(stat in stations){ 
        i <- i+1 
        local({ 
         txt <- outValues[i] 
         output[[paste0("Out_",stat)]] <- renderText({txt}) 
        }) 
        } 
    } 
    s2 <- function(input,output,session){ 
        i <- 0 
        for(stat in stations){ 
        i <- i+1 
        f <- function(i) { force(i); outValues[i] } 
        output[[paste0("Out_",stat)]] <- renderText({f(i)}) 
        } 
    } 
    s3 <- function(input,output,session){ 
         lapply(1:4,function(i){ 
          output[[paste0("Out_",stations[i])]] <- renderText({outValues[i]}) }) 
    } 
    shinyApp(u,s3) 
    

所以s0(原件)和s2(力)产生这个输出 - 这是什么期望:

enter image description here

而且s1(本地),s3 (lapply)会给你这个输出,这是想要的:

enter image description here

因为这取决于版本,这里是我的会议信息: enter image description here