Shiny 从两个单选按钮中读取两列的名称,并将它们的向量放在R中的一个数据帧中

Shiny 从两个单选按钮中读取两列的名称,并将它们的向量放在R中的一个数据帧中,shiny,Shiny,我有一套内置数据。目标是从两个单选按钮中读入两列的名称,然后从所选列生成数据帧。我在这里做了一个可复制的例子 如果你运行 output$mytable = renderDataTable(vector1) 或 另外,你会发现每个observeEvents都工作正常,但我被卡住了,无法将这些列放在一起 p.S.1.我知道最后两行会给出一个错误,因为一开始没有vector1和vector2。因此,我提出#让他们发表评论 我需要在另一个地方使用生成的数据帧。这就是为什么我坚持要形成一个数据框架 l

我有一套内置数据。目标是从两个单选按钮中读入两列的名称,然后从所选列生成数据帧。我在这里做了一个可复制的例子

如果你运行

 output$mytable = renderDataTable(vector1)

另外,你会发现每个observeEvents都工作正常,但我被卡住了,无法将这些列放在一起

p.S.1.我知道最后两行会给出一个错误,因为一开始没有
vector1
vector2
。因此,我提出#让他们发表评论

我需要在另一个地方使用生成的数据帧。这就是为什么我坚持要形成一个数据框架

library(shiny)

vchoices <- 1:ncol(mtcars)
names(vchoices) <- names(mtcars)

runApp(list(
  ui = basicPage(
    h2('The mtcars data'),
    radioButtons(
      "column1",
      "select columns",
      choices = vchoices,
      inline = T
    ),
    radioButtons(
      "column2",
      "select columns",
      choices = vchoices,
      inline = T
    ),
    dataTableOutput('mytable')
  ),

  server = function(input, output) {
    observeEvent(input$column1, {
      cols1 <- as.numeric(input$column1)
      vector1 <- data.frame(mtcars[, cols1])
      names(vector1) <- c("Firstcolumn")
      #output$mytable = renderDataTable(vector1)
    })

    observeEvent(input$column2, {
      cols2 <- as.numeric(input$column2)
      vector2 <- data.frame(mtcars[, cols2])
      names(vector2) <- c("Firstcolumn")
      #output$mytable = renderDataTable(vector2)
    })
    #z <- cbind(vector1, vector2)
    #output$mytable = renderDataTable(z)
    }
 ))
库(闪亮)

vchoices如果您想分两步进行,可以使用
反应式

z <- reactive(mtcars[,c(as.numeric(input$column1),as.numeric(input$column2‌​))] )

output$mytable = renderDataTable(z()) # Notice the parenthesis after z

z为什么不直接编写
output$mytable@HubertL呢?我想你是对的。我可以使用相同的结构并形成一个数据框架。ThanksI试图编写
z=mtcars[,c(as.numeric(输入$column1),as.numeric(输入$column2))]输出$mytable=renderDataTable(z)
,但它给出了一个错误以及操作需要和活动-反应环境。准确!非常感谢。我没有名声,但我投票赞成你的答案。
z <- reactive(mtcars[,c(as.numeric(input$column1),as.numeric(input$column2‌​))] )

output$mytable = renderDataTable(z()) # Notice the parenthesis after z