R Shiny按checkboxGroupInput

时间:2016-03-18 18:39:58

标签: r shiny

当我为col_num传递int时,以下代码有效:

makeHRdata = function(Test, model, col_num) {
  means = 1:length(Test)
  for (i in 1:length(Test)) means[i] = mean(Test[,i])
  TestCopy = Test[1,]
  TestCopy[1,] = t(means)
  pdpHR = range(Test[col_num])
  for (i in range(Test[col_num])[1]:range(Test[col_num])[2]) {
    TestCopy[1,col_num] = i
    pdpHR[i] = predict(model,TestCopy) 
  }
  return(pdpHR)
}

我希望用户能够在checkboxGroupInput中选择col_num(允许多次调用此函数)。

我可以使用checkboxGroupInput打印出用户的输入,如下所示:

output$text5 <- renderText({ 
      paste( "The object you selected is ",
            input$select_columns2)
})

因此,输入$ select_columns2包含一个列名称的字符串。

我尝试重写该函数以合并字符串而不是int作为列名:

makeHRdata = function(Test, model, col_num) {
  means = 1:length(Test)
  for (i in 1:length(Test)) means[i] = mean(Test[,i])
  TestCopy = Test[1,]
  TestCopy[1,] = t(means)
  pdpHR = range(Test$col_num)
  for (i in range(Test$col_num)[1]:range(Test$col_num)[2]) {
    #TestCopy[1,col_num] = i
    TestCopy$col_num[1] = i
    pdpHR[i] = predict(model,TestCopy)  
  }
  return(pdpHR)
}

我用这个来调用这个函数:

reactiveHRdata = reactive({
      makeHRdata(get(input$select_test_data2),eecs,input$select_columns2) 
})

我尝试这个时得到的错误是:     范围错误(Test $ col_num)[1]:范围(Test $ col_num)[2]:       结果将是一个太长的向量

范围是0到63,这当然不会太长。&#34;当我使用int指定列时,我不会收到此错误。

另外,我通过写一个列名而不是使用变量col_num来测试我的新函数,它运行得很好。 (HR是列名。):

makeHRdata = function(Test, model, col_num) {
  means = 1:length(Test)
  for (i in 1:length(Test)) means[i] = mean(Test[,i])
  TestCopy = Test[1,]
  TestCopy[1,] = t(means)
  pdpHR = range(Test$HR)
  for (i in range(Test$HR)[1]:range(Test$HR)[2]) {
    TestCopy$HR[1] = i
    pdpHR[i] = predict(model,TestCopy)  
  }
  return(pdpHR)
}

知道如何将列名称作为字符串传递并使一切正常工作吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

这是一个有趣的错误。请参阅此说明:

> df <- data.frame(a = 1:10)
> range(df$b)
[1]  Inf -Inf
Warning messages:
1: In min(x, na.rm = na.rm) :
  no non-missing arguments to min; returning Inf
2: In max(x, na.rm = na.rm) :
  no non-missing arguments to max; returning -Inf

显然,当你致电Test$col_num时,它无法识别col_num是变量。它搜索“col_num”列NULLrange变为[-Inf,Inf]并且您没有看到警告,因为它是在函数环境中执行的。当然,向量-Inf:Inf太大了。

以下是修复(以及通过变量调用列的方式):使用 Test[[col_num]] 而不是Test$col_num