Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在Shining app中为循环内的多个绘图生成输出?_R_Shiny - Fatal编程技术网

R 如何在Shining app中为循环内的多个绘图生成输出?

R 如何在Shining app中为循环内的多个绘图生成输出?,r,shiny,R,Shiny,非常简单的问题:我想要输出几个条形图 例如:我有一个dataset:data和一个customer:cname列表 shinyServer(function(input, output){ for(name in cname){ output[[name]] <- renderPlot({ bp<-barplot(data[data$customer==name,1]) }) } } shinyServer(功能(

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

例如:我有一个dataset:data和一个customer:cname列表

shinyServer(function(input, output){
     for(name in cname){
        output[[name]] <- renderPlot({
        bp<-barplot(data[data$customer==name,1])
        })
     }
}
shinyServer(功能(输入、输出){
for(cname中的名称){

输出[[name]]因此,您似乎遇到的问题与计算延迟有关。
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")
))
))
#示例数据
种子(15)

cname我同意接受答案中的解释。但是我们不需要使用
Map
函数,它是
mapply
的包装,即
sapply
(参见?Map)的多变量版本。在这种情况下,我们可以简单地使用更传统的函数
lappy

lappy(cname,function(name){
输出[[name]]请提供一个带有一些示例数据的a,以便我们可以测试代码以查看可能发生的情况。还包括一个简单的UI,以进行测试。