我正在使用 R 将一些大型文本文件读入数据库,但它们包含数据库软件的非法字段名称。大文本文件的列名就在第一行——是否可以只编辑第一行而不循环遍历文件中的每一行(这似乎浪费资源)?
这里有两个例子,我试图用一些示例数据做些什么。第一个将所有内容读入 ram - 所以这不适用于我的大型数据表。第二个可以工作,但速度很慢,因为它处理文件中的每一行。
我认为解决方案跨平台工作并且不需要安装外部软件(除了 R 包)是很重要的,因为我将与其他人共享这个脚本,并且不想让他们执行更多不必要的步骤。我正在寻找仅在 R中执行此操作的最快方法 :)
# create two temporary files
tf <- tempfile() ; tf2 <- tempfile()
# write the mtcars data table to a file on the disk
write.csv( mtcars , tf )
# look at the first three lines
readLines( tf , n = 3 )
# read in the entire table
z <- readLines( tf )
# make the only substitution i care about
z[1] <- gsub( 'disp' , 'newvar' , z[1] )
# write the entire table back out to the table
writeLines( z , tf2 )
# confirm the replacement
readLines( tf2 , 2 )
# done!
# # # # # # # OR
# blank out the output file
file.remove( tf2 )
# create a file connection to the text file
incon <- file( tf , "r" )
# create a second file connection to the secondary temporary file
outcon <- file( tf2 , "w" )
# read in one line at a time
while( length( one.line <- readLines( incon , 1 ) ) > 0 ){
# make the substitution on every line
one.line <- gsub( 'disp' , 'newvar' , one.line )
# write each line to the second temporary file
writeLines( one.line , outcon )
}
# close the connections
close( incon ) ; close( outcon )
# confirm the replacement
readLines( tf2 , 2 )
# done!