2016-04-07 221 views
0

我导入使用一些文本文件跳过函数read.table中排:内for循环

d <- read.table(fid, skip = 21, header = FALSE, comment.char = '/', sep = '\t', fill = TRUE) 

其中FID是一个循环内定义的,所以我在每次迭代中加载不同的文件。我遇到的问题是,我需要跳过的行数因文件而异。例如,在这个特定的文件中,我需要跳过21,而在下一个将是22.我需要跳过的行在文件中用'/ *'标识。例如:

/* DATA DESCRIPTION: 
blah blah 
blah blah 
*/ 
data starts here 

所以在这个例子中,我会用我想到

d <- read.table(fid, skip = 4, header = FALSE, comment.char = '/', sep = '\t', fill = TRUE) 

一种选择是通过终端删除所有这些行,但必须有这样的一种方式R.

有没有想法?

+0

你可能会尝试'readLines()'整个文件,使用正则表达式来删除这部分文件,然后从结果字符向量中读取'read.table(text =)'。 – Thomas

回答

1

要跟进@Thomas的评论,你可以尝试以下操作:

for(file in fileList) { 
    # find skip line 
    temp <- readLines(file) 
    skipLine <- which(temp == "*/") 

    # read in file 
    d <- read.table(file, skip = skipLine, header = FALSE, comment.char = '/', sep = '\t', fill = TRUE) 
} 

如果你知道注释行的最大数量和文件的大小相当大的,你可以使用这个在n参数readLines()函数中减小了读取的大小并加快了处理速度。