0

私は R に文字ベクトル (q2 という名前) を持っています。ここで、各観察は、アンケートの自由回答形式の質問に対する個人の回答です。簡単に言えば、各人の回答をテキスト ファイルとして保存するように R に指示するにはどうすればよいでしょうか。たとえば、「file01.txt」「file02.txt」などはすべての場合ですか?

これよりも効率的またはより良い方法はありますか?

for(i in 1:length(q2)) {
    filename <- paste("file",i,".txt", sep="")
    writeLines(as.character(q2[i]), con=filename) 
}
4

2 に答える 2

2

したがって、R の「一般的なルール」は、ループを記述しないことですが、そのルールにやみくもに従う必要はありません。ループを回避する理由は、R でループを反復処理するには多くの解釈された機構が必要になるため、ループは非効率的だからです。ただし、これは、ループの実際の内容を非常に高速に実行できる場合にのみ問題になります。その場合、反復がボトルネックになります。たとえば、次のように書いて 2 つのベクトルを加算したくないでしょう。

for(i in 1:length(x))
   z[i]<-x[i]+y[i]

ただし、あなたの場合、ループの本体ではファイルを開いて書き込む必要があり、これらの操作は反復よりもはるかに時間がかかります。したがって、この場合、ループを使用しても問題ありません。これ以上これを最適化しようとする理由はありません。

于 2013-10-13T23:04:51.093 に答える
2

filenamesできることの 1 つは、ループからの作成を削除することです。これpasteは、ベクトル化できるためです。

    #simulation of your data
    q2 <- sample(c("yes", "no", "maybe", "idk", "nevermind"), 20, T)

    #names of potential ".txt"s. ("formatC" is used to add a leading "0")
    filenames <- paste("file", formatC(1:length(q2), digits = 1, flag = "0"), ".txt", sep = "")

    #set working directory to write the files
    setwd("C:/Desktop/myfiles")

    #the loop
    for(i in 1:length(q2))
     {
      write(q2[i], file = filenames[i])
     }
于 2013-10-13T23:16:23.207 に答える