2016-05-02 56 views
0

私は彼の最初のスクリプトを書くことを試みるRの初心者です。 forループ内で問題が発生しました。 私のコードでは、部分的に共通の名前を共有する2つのベクトルから2列のデータフレームを作成しています。私はこれらの一般的な名前のいくつか(ベクトルaで定義)に対してこれを実行するためにforループを使用します。forループwrite.csv関数のエラー

paste("A",1:4,sep="")->a  
for (i in a) { 
    j<-grep(x= ls(pos=1), pattern=i, value=TRUE) 
    data.frame(do.call(cbind,mget(j)))-> k 
    print(k) 
} 

これは動作しますが、私はこのコードを使用して別のCSVファイルとしてこれらのデータ・フレームを印刷するとき、私は、問題が発生した:

Error in file(file, ifelse(append, "a", "w")) : 
invalid 'description' argument 
In addition: Warning message: 
In if (file == "") file <- stdout() else if (is.character(file)) { : 
    the condition has length > 1 and only the first element will be used 
を次のようにエラーが表示さ

for (i in a) { 
    j<-grep(x= ls(pos=1), pattern=i, value=TRUE) 
    data.frame(do.call(cbind,mget(j)))-> k 
    print(k) 
    write.table (k, file = paste("Results_",i, sep='')) 
} 

読み取り

さらに、fllwingは機能しましたが、もちろん、最後の反復の1つのcsvファイルを作成するだけです

for (i in a) { 
j<-grep(x= ls(pos=1), pattern=i, value=TRUE) 
data.frame(do.call(cbind,mget(j)))-> ff 
print(ff) 
write.table (ff, file = "results_df.csv")} 

ありがとうございます!

+0

他にも:このエラーに関する他の質問では、私は書き込みの許可が必要だと言われました。 write.csvが以前と同じディレクトリにあったので、私はそうします –

+0

'for'ループのために使用しているインデックス変数の値を変更することによって良い結果が得られることはありません。 (それはヒントです) – joran

+0

...また、本当に始まったら、(1) 'data.frame(cbind())'は一般的にかなり悪い考えです。 'cbind'はすべてのオブジェクトを一つの型に強制するので、data.frameを作成するのは誤解を招きやすくエラーが発生する可能性があります。(2)単一の独立したオブジェクトを保持する悪い習慣のように、ワークスペース内の同様に名前の付いたオブジェクトです。それらが関連していて、グループで計算する必要がある場合は、それらを名前付きリストに入れます。あなたがちょうど始まっていて、 'get'や 'mget'に頼っているのであれば、あなたはおそらく最善の道を選んでいないでしょう。 – joran

答えて

0

ファイルエラーの鍵は次のとおりです。ファイル内

エラー(ファイル、ifelse( "A"、 "W"、追加)):無効 '説明' 引数に加えて:警告メッセージ:であれば(ファイル== "")<ファイル - STDOUT()そうであれば(is.character(ファイル)){:条件を 有する長さ> 1のみ最初の要素は

を使用します

'file'は明らかにベクトルであり、単一の文字列ではありません。

これは唯一の問題ではないかもしれません。

関連する問題