2016-12-14 5 views
0

2列10列のデータフレームを作成しようとしています。最初の列には重み(コードではw)が含まれ、2列目にはエラー率(cv.errorで示されます)が格納されます。しかし、私はそこにNAだけのデータフレームを取得します。私は何が間違っているのか分かりません。ヘルプをいただければ幸いです。データフレーム内のNAsだけを取得していますか?

最初の列が "w"で、もう一方がcv.errorのデータフレームが必要です。続き

は、問題はおそらくあなたがデータフレームをインスタンス化する方法に関連している私のコード

l <- data.frame(matrix(NA, nrow = 10, ncol = 2)) 

k_fun <- function(combined_distance,n,j) 
{ 
    glm_fit <- glm(gcms$train$response ~ combined_distance ,family=binomial, data=gcms$train,control = list(maxit = 50)) 
    cv.error = cv.glm(gcms$train, glm_fit,K=5)$delta[1] 
    l[j,1] = n 
    l[j,2] = cv.error 
} 

w = c(0.1,0.2,0.25,0.3,0.35,0.4,0.45,0.50,0.7,0.9) 

for(j in 1:10) 
{ 
    combined_distance <- alkoloiddistance + (1 - alkoloiddistance^w[j]) * solventdistance 
    k_fun(combined_distance,w[j],j) 
} 
+0

@ R -Fever "gcms、alkoloiddistance、および溶媒距離が何であるかを示すことができますか? ' l [j、1] << - n'と 'l [j、2] << - cv.error '。あなたは関数内のデータフレームを更新したいと思っていますが、実際には更新された関数内のローカルコピーだけなので、あなたのループを実行した後、rセッションのデータフレームはまったく変わりません" –

+1

@R -Fever ...ありがとう私はあなたが言ったことを試して、それは私のコードを動作させる方法だけで動作しています。 –

答えて

1

なぜ私の答えが削除されたのかわかりません。それは質問に答え、それは理由を説明した。

が必要です。l[j,1] <<- nl[j,2] <<- cv.errorです。関数内でlを更新したいと思っていますが、実際には更新された関数内のローカルコピーだけです。ループを実行した後、rセッションのlはまったく変更されません。 uは、NAのデータフレームとしてlを設定します。したがって、まだすべてのNAを持つデータフレームを取得します。

0

です。コードの最初の行を実行した後にstr(l)を実行すると、Rによって割り当てられたデータ型が論理または要素のいずれかであることがわかります。これらの型の列に数値を代入しようとすると、代わりにNAが得られます。残りのコードの前にoptions(stringsAsFactors = F)を実行してみてください。または、コードの最初の行に希望するクラスのクラスを割り当てることができます(例:NA_integer_)。

関連する問題