使用输入生成具有n个向量的data.frame

使用输入生成具有n个向量的data.frame,r,shiny,R,Shiny,我很难理解为什么“testTable2”不起作用(参见下面的代码),而如果我手动将值添加到数据帧中,则没有问题。请看一看,让我知道我在哪里搞砸了,或者告诉我正确的方向。非常感谢 library(shiny) ui <- fluidPage( # Application title titlePanel("test"), # Sidebar sidebarLayout( sidebarPanel(

我很难理解为什么“testTable2”不起作用(参见下面的代码),而如果我手动将值添加到数据帧中,则没有问题。请看一看,让我知道我在哪里搞砸了,或者告诉我正确的方向。非常感谢

library(shiny)

ui <- fluidPage(

    # Application title
    titlePanel("test"),

    # Sidebar  
    sidebarLayout(
        sidebarPanel(
            sliderInput("n",
                        "Number",
                        min = 1,
                        max = 10,
                        value = 5)
        ),

        # Show table
        mainPanel(
          tableOutput("testTable1"),
          tableOutput("testTable2")
        )
    )
)

# Define server logic 
server <- function(input, output) {

    #generate some vectors using input$n
    vec1<-reactive({
        rnorm(input$n,mean=0,sd=1)
    })
    vec2<-reactive({
        rnorm(input$n,mean=1,sd=1)
    })
    vec3<-reactive({
        rnorm(input$n,mean=10,sd=0.5)
    })
    vec4<-reactive({
        rnorm(input$n,mean=3,sd=5)
    })
    vec5<-reactive({
        rnorm(input$n,mean=-1,sd=2)
    })
    
    #create a table manually
    output$testTable1<-renderTable({
        data.frame(vec1(),vec2(),vec3(),vec4(),vec5())
    })
    #add vectors to a table using an input
    output$testTable2<-renderTable({
        data.frame(sapply(paste0("vec",1:input$n),get()))
    })
}

# Run the application 
shinyApp(ui = ui, server = server)
库(闪亮)

ui动态访问您可以使用的反应式函数-

output$testTable2<-renderTable({
      data.frame(sapply(paste0("vec",1:input$n),function(x) get(x)()))
})

输出$testtable2tanks!太好了!。您能否提供一些资源/书籍/网站,让我了解更多关于Shiny的信息。到目前为止,我所看到的一切都没有提到如何在反应对象中调用函数。干杯看一看。这是一本免费的书,通常推荐用于学习。请不要为仅与R相关的问题添加
rstudio
标记。
rstudio
标记是为与rstudio IDE相关的问题保留的。
library(shiny)

ui <- fluidPage(
  
  # Application title
  titlePanel("test"),
  
  # Sidebar  
  sidebarLayout(
    sidebarPanel(
      sliderInput("n",
                  "Number",
                  min = 1,
                  max = 10,
                  value = 5)
    ),
    
    # Show table
    mainPanel(
      tableOutput("testTable1"),
      tableOutput("testTable2")
    )
  )
)

# Define server logic 
server <- function(input, output) {
  
  #generate some vectors using input$n
  vec1<-reactive({
    rnorm(input$n,mean=0,sd=1)
  })
  vec2<-reactive({
    rnorm(input$n,mean=1,sd=1)
  })
  vec3<-reactive({
    rnorm(input$n,mean=10,sd=0.5)
  })
  vec4<-reactive({
    rnorm(input$n,mean=3,sd=5)
  })
  vec5<-reactive({
    rnorm(input$n,mean=-1,sd=2)
  })
  
  #create a table manually
  output$testTable1<-renderTable({
    data.frame(vec1(),vec2(),vec3(),vec4(),vec5())
  })
  #add vectors to a table using an input
  output$testTable2<-renderTable({
      data.frame(sapply(paste0("vec",1:input$n),function(x) get(x)()))
  })
}

# Run the application 
shinyApp(ui = ui, server = server)