我在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)
}
答案 0 :(得分:2)
所以R中的“一般规则”是避免编写循环,但是你不需要盲目地遵循这个规则。避免循环的原因是循环效率低,因为迭代R中的循环需要大量的解释机制。但是,这只有在循环的实际内容可以非常快速地执行时才真正重要,在这种情况下,迭代将成为瓶颈。例如,您永远不想通过编写
将两个向量添加到一起for(i in 1:length(x))
z[i]<-x[i]+y[i]
但是,在您的情况下,循环体需要打开文件并写入文件,这些操作将比迭代花费更长的时间。因此,在这种情况下,使用循环很好,并且没有理由尝试进一步优化它。
答案 1 :(得分: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])
}