我在关于我困惑的内容上做了一些调查,只发现了这个网页:Do some programs not accept process substitution for input files?虽然有所帮助,但我真的很想了解完整的故事。我注意到当我使用进程替换时,我的一些R脚本会给出不同(即错误)的结果。
我尝试通过一个测试用例来找出问题所在:
以下是这个脚本:
这让我想到了以下内容:
进一步的测试表明,有些行丢失了......但我想知道原因。read.table(scan给出相同的结果)是否使用seek?
附注: 对于较小的测试文件(100),会报告错误:
添加#1:使用修改后的脚本并使用扫描,结果相同。
我尝试通过一个测试用例来找出问题所在:
以下是这个脚本:
#!/usr/bin/Rscript
args <- commandArgs(TRUE)
file <-args[1]
cat(file)
cat("\n")
data <- read.table(file, header=F)
cat(mean(data$V1))
cat("\n")
使用这种方式生成的输入文件:
$ for i in `seq 1 10`; do echo $i >> p; done
$ for i in `seq 1 500`; do cat p >> test; done
这让我想到了以下内容:
$ ./mean.R test
test
5.5
$ ./mean.R <(cat test)
/dev/fd/63
5.501476
进一步的测试表明,有些行丢失了......但我想知道原因。read.table(scan给出相同的结果)是否使用seek?
附注: 对于较小的测试文件(100),会报告错误:
$./mean.R <(cat test3)
/dev/fd/63
Error in read.table(file, header = F) : no lines available in input
Execution halted
添加#1:使用修改后的脚本并使用扫描,结果相同。
read.table
可能会查看文件以确定列格式,然后在返回开头时失败。(只是一个猜测。)如果您在 R 脚本中运行cat(head(data$V1))
,会发生什么? - krlmlr