我习惯于perl和R的新手。我知道你可以使用read.table()
读取整个表格,但我想知道如何使用R来解析输入文件中的一行。
具体来说,相当于以下perl片段:
open my $fh, $filename or die 'can't open file $filename';
my $line = <$fh>;
my ($first, $second, $third) = split ("\t", $line);
答案 0 :(得分:3)
与上述类似:
filename <- 'your/file/name/here'
fh <- file( filename, open='rt' )
line <- readLines(fh, n=1 )
tmp <- strsplit(line, "\\t")
first <- tmp[[1]][1]; second <- tmp[[1]][2]; third <- tmp[[1]][3]
文件功能创建与文件的连接并打开它,打开是可选的,但是如果你不打开文件,那么当你从中读取它时它会打开然后再次关闭文件,如果你打开文件然后它保持打开状态,下一次读取继续前一个左边的位置(最接近Perl将在上面做的那样)。
readLines函数将读取指定的行数(在本例中为1) 那么strsplit的工作原理与Perl split函数基本相同。
R没有像Perl那样的多重赋值(通常最好只将结果保持在一起而不是分成多个全局变量)。
答案 1 :(得分:1)
一般情况下,您应该使用scan
执行此操作,或者在更复杂的情况下使用readLines
阅读整个文件,并使用strsplit
s grep
手动解析它s和东西。
在你的情况下:
scan(filename,character(0),nmax=3)->d
first<-d[1];d[2]->second;third<-d[3]
答案 2 :(得分:0)
只是为了表明另一种方法(假设你的输入是“temp / 3.txt”):
> d <- read.csv("temp/3.txt", sep="\t", stringsAsFactors=F, header=F, nrows=1)
# Show the default column names:
> colnames(d)
[1] "V1" "V2" "V3"
# Assign the requested column names
> colnames(d) <- c("first", "second", "third")
# Show the current structure of d
> d
first second third
1 1 2 3
# Probably not recommended: Add the columns of d to the search path
> attach(d)
> first
[1] 1
# Clean up:
> detach(d)
我想在解决你的问题方面,上面最重要的部分就是
nrows=1
告诉它解析一行输入。 (在read.csv下面最终只是调用扫描。)