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 中迭代循环需要大量解释机制。然而,这只有在循环的实际内容可以非常快速地执行时才真正重要,在这种情况下,迭代将成为瓶颈。例如,您永远不想通过编写将两个向量相加在一起

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

但是,在您的情况下,循环的主体需要打开一个文件并写入它,这些操作将比迭代花费更长的时间。所以在这种情况下,使用循环很好,没有理由进一步尝试优化它。

于 2013-10-13T23:04:51.093 回答
2

您可以做的一件事是filenames从循环中删除创建,因为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 回答