2016-03-18 7 views
0

で列を選択:Rシャイニー私はcol_numのためにint型を渡すときは、次のコードが動作するcheckboxGroupInput

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) 
}) 

I私が取得エラー範囲(Test $ col_num)のエラー[1]:範囲(Test $ col_num)[2]: 結果が長すぎるベクトル

範囲は0〜63ですが、これは確かに「長すぎる」ものではありません。私は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

これは面白いエラーです。説明のためにこれを参照してください。

> 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を認識しません。それはNULLである列 "col_num"を検索します。 rangeは[-Inf、Inf]になり、関数環境内で実行されるため警告が表示されません。もちろん、ベクトル-Inf:Infは大きすぎます。

ここでは、変数を使用して列を呼び出す方法と修正方法を示します。Test$col_numの代わりにTest[[col_num]]を使用します。

+0

それがうまくいった!面白いエラーでした。あなたの助けをありがとう! –

関連する問題