2016-10-28 2 views
1

ループ内に数字と文字のリストを作成し、そのリストをデータフレームに割り当てます。私は各変数を手前で定義し、因子を使用していません(少なくとも私はそのように感じます)。基本的には、私が言及した変数でデータフレームを作成したいと思います。私はエラーが発生しますデータフレームにリストを割り当てる - エラーが発生しました:無効な因子レベル、NAが生成されました

NumToShow = numeric(0) 
MatToShow = character() 
flag   = numeric(0) 

datalist = data.frame(NumToShow,MatToShow,flag) 

for (i in 1:3){ 
    NumToShow = i 
    MatToShow = "aaa" 
    flag = i^2 

    Row_i = list(NumToShow,MatToShow,flag) 
    # Combining all the data 
    datalist[i,] = Row_i 
} 

In `[<-.factor`(`*tmp*`, iseq, value = "aaa") : 
    invalid factor level, NA generated 

私はそれを取得していますなぜ私は正確にわからないここで私はで動作するようにしようとしているコードです。どんな助けもありがとう。これが愚かなことであれば謝ります。ありがとう:)

+0

これは、警告とエラーの詳細です。 'datalist'では、' MatToShow'は_factor_です。ループ中に値を割り当てますが、これは 'levels(MatToShow)'の要素ではありません。これらの値は「NA」になります。解決策:レベル(MatToShow)に値を追加するか、_factors_の代わりに_character_ベクトルを使用します。 'data.frame(NumToShow、MatToShow、flag、stringsAsFactors = FALSE)'を指定することによって、 – lukeA

+0

これは、行単位でdata.frameにデータを追加するための非常に悪いパターンです。この単純な例では、 'data.frame(NumToShow = 1:3、MatToShow =" aaa "、flag =(1:3)^ 2)'を実行できます。しかし、実際に何をしようとしているのかを記述する方が良いでしょう。 R – MrFlick

+0

'?data.frame'でより良い方法があるとしたら、引数' stringsAsFactors'を見てください。私はしばしば同じミスを自分でします。 – panman

答えて

0

チェック?data.frame()

data.frame(..., row.names = NULL, check.rows = FALSE, 
      check.names = TRUE, fix.empty.names = TRUE, 
      stringsAsFactors = default.stringsAsFactors()) 

そしてタイプ:

default.stringsAsFactors() 
# [1] TRUE 

あなたが明示的要因として文字を処理しないようにdata.frame()ためにstringsAsFactors = FALSEを設定する必要があります。

+0

ありがとう!これはうまくいきます:)将来、私は関数のデフォルトを調べることに注意します。 – unitedsaga

関連する問題