gpt4 book ai didi

r - 如何在 Shiny 的应用程序中为循环内的多图生成输出?

转载 作者:行者123 更新时间:2023-12-01 09:52:18 27 4
gpt4 key购买 nike

非常简单的问题:我想要输出几个条形图,

例如:我有一个数据集:数据和客户列表:cname

shinyServer(function(input, output){
for(name in cname){
output[[name]] <- renderPlot({
bp<-barplot(data[data$customer==name,1])
})
}
}

但它不起作用,似乎循环没有完全执行,这里需要有人帮助。

最佳答案

因此,您似乎遇到的问题与延迟评估有关。 renderPlot() 中的命令不会立即执行。当绘图准备好绘制时,它们会被捕获并运行。问题是 name 的值在每次迭代中都会发生变化。在绘制绘图时(在 for 循环完成之后很长时间),name 变量只有它在循环中的最后一个值。

最简单的解决方法可能是从 for 循环切换到使用 Map。由于 Map 调用函数,这些函数创建闭包,捕获每次迭代的 name 的当前值。试试这个

# sample data
set.seed(15)
cname <- letters[1:3]
data <- data.frame(
vals = rpois(10*length(cname),15),
customer = rep(cname,each=10)
)

runApp(list(server=
shinyServer(function(input, output){
Map(function(name) {
output[[name]] <- renderPlot({
barplot(data[data$customer==name,1])
})
},
cname)
})
,ui=
shinyUI(fluidPage(
plotOutput("a"),
plotOutput("b"),
plotOutput("c")
))
))

关于r - 如何在 Shiny 的应用程序中为循环内的多图生成输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35737029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com