从R中的不同方法写入一个文件

时间:2015-05-22 06:38:08

标签: r csv xlsx

一般情况下,我正在尝试创建R代码,从不同的txt文件(test1.txt,test2.txt,...)中读取问题并创建一个文件(exam.txt)。换句话说,我有不同的问题池文件,我想从中创建一个考试文件。问题类型(真/假,多选,简答题,填空格,表匹配)。我选择使用txt文件的原因是因为R不支持MS docx文件(除非我经历漫长的过程as pointed in this blog

我找到exams package来创建考试,这不是我想要的。

一种简单的方法是逐个读取文件并将问题转储到一个文件中(exam.txt)。我面临两个问题:

1 - 如何将已读取的内容写入文件(exam.txt注意:txt或csv或xlsx没问题,但是,为了简单起见,我更喜欢txt)并保持打开以用于下一个文件内容。

2-如何选择从每个文件中读取的问题数量。

我尝试了以下内容:

ReadTxt<-function(){
fileName="test1.txt"
conn=file(fileName,open="r",encoding = 'UTF-8')
linn=readLines(conn)
for (i in 1:length(linn)){
   if (!(grepl("#",linn[i])) )
   cat(linn[i],"\n")
}
close(conn)
}

我在每个txt文件中使用#作为问题之间的分隔符。这就是我使用grepl命令的原因。

test1.txt:

的样本
First question goes here
#
Second question
#
Third question 
#

完整的R代码将是这样的:

createExam<-function(){ 
ReadTxt("test1.txt")
#ReadTxt("test2.txt")
#ReadTxt("test3.txt")
 }

ReadTxt<-function(fname){
fileName=fname
conn=file(fileName,open="r",encoding = 'UTF-8')
linn=readLines(conn)
for (i in 1:length(linn)){
  if (!(grepl("#",linn[i])) )
  cat(linn[i],"\n")
 }
 close(conn)


 }

1 个答案:

答案 0 :(得分:1)

您可以先读取内存中的所有问题,然后将其写入磁盘

考虑您的测试文件:

$ cat test1.txt 
1 First question goes here
#
1 Second question
#
1 Third question 
#
$ cat test2.txt 
2 First question goes here
#
2 Second question
#
2 Third question 
#
$ cat test3.txt 
3 First question goes here
#
3 Second question
#
3 Third question 
#

此R语法读取内存中的所有文件,然后将问题的子集打印到文件

createExam<-function(){
  res <- list()
  res <- ReadTxt("test1.txt", res)
  res <- ReadTxt("test2.txt", res)
  res <- ReadTxt("test3.txt", res)
  return(res)
}

ReadTxt<-function(fname, res){
  fileName=fname
  conn=file(fileName,open="r",encoding = 'UTF-8')
  linn=readLines(conn)
  for (i in 1:length(linn)){
      if (!(grepl("#",linn[i])) )
      res[[length(res)+1]]<-linn[i]
    }
    close(conn)
    return(res)
}

questions <- createExam()
subset <- questions[c(1,2,4,5,7,8)]
conn=file("exam.txt",open="w",encoding = 'UTF-8')
for (i in 1:length(subset)){
  writeLines(subset[[i]], conn)
}
close(conn)

以上给出了结果

$ Rscript t.R 
$ cat exam.txt 
1 First question goes here
1 Second question
2 First question goes here
2 Second question
3 First question goes here
3 Second question