是否可以生成一个reactiveValues变量名称由某个列表给出的变量list_of_names?例如,这些变量可以存储指示相应变量的状态的布尔值。
想象一下我有一个清单x:
x <- lapply(LETTERS, function(i) TRUE)
names(x) <- LETTERS
Run Code Online (Sandbox Code Playgroud)
我可以生成一个reactiveValues rv行为x类似的x吗?
我没能做到这一点,我能想到的就是这样的:
ui <- fluidPage(
textOutput("boolean")
)
server = function(input, output, session){
nms <- LETTERS[1:10]
### lines that I would change
rv <- reactiveValues(A = TRUE)
for (n in nms) {rv[[n]] <- TRUE}
###
output$boolean <- renderText(rv[["D"]])
}
shinyApp(ui,server)
Run Code Online (Sandbox Code Playgroud)
它有效,但我确信必须有一种更简单且“更干净”的方法来做到这一点,因为x和rv非常相似。感谢任何可以在这方面帮助我的人。
一种简单的方法是将向量作为函数reactiveValues的参数调用:
ui <- fluidPage(
textOutput("boolean")
)
server = function(input, output, session){
x <- as.list(rep(T,10))
names(x) <- LETTERS[1:10]
# x as arguments of reactiveValues function
rv <- do.call("reactiveValues",x)
# still works
output$boolean <- renderText(rv[["D"]])
}
shinyApp(ui,server)
Run Code Online (Sandbox Code Playgroud)
编辑:对我来说,不可能保持向量的原始顺序。另一种方法是将其保存在其他地方(如果可能),然后在需要时调用它:
ui <- fluidPage(
textOutput("boolean")
)
server = function(input, output, session){
x <- as.list(rep(T,10))
names(x) <- rev(LETTERS[1:10])
true_order <- levels(factor(names(x),names(x)))
# x as arguments of reactiveValues function
rv <- do.call("reactiveValues",x)
# still works
output$boolean <- renderText({
p <- names(x)
paste0(p[sapply(true_order,function(x,p){which(p == x)},p=p)], collapse = "-")
}
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1775 次 |
| 最近记录: |