Substituição de processos

Eu dei uma olhada em torno do que me intriga e eu só encontrei isto:Alguns programas não aceitam a substituição de processos por arquivos de entrada?

o que está ajudando parcialmente, mas eu realmente gostaria de entender a história completa. Notei que alguns dos meus scripts R dão resultados diferentes (ou seja, errados) quando eu uso a substituição de processos.

Eu tentei identificar o problema com um caso de teste:

Este script:

#!/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")

com um arquivo de entrada gerado desta maneira:

$ for i in `seq 1 10`; do echo $i >> p; done
$ for i in `seq 1 500`; do cat p >> test; done

me leva a isso:

$ ./mean.R test
test
5.5

$ ./mean.R <(cat test)
/dev/fd/63
5.501476

Mais testes revelam que algumas linhas estão perdidas ... mas eu gostaria de entender o porquê. O read.table (scan dá os mesmos resultados) usa seek?

Ps. com um arquivo de teste menor (100), um erro é relatado:

$./mean.R <(cat test3)
/dev/fd/63
Error in read.table(file, header = F) : no lines available in input
Execution halted

Adicione # 1: com um script modificado que usa varredura, os resultados são os mesmos.

questionAnswers(1)

yourAnswerToTheQuestion