如何在多个文件上执行R脚本,并将每个文件的输出放在一个csv文件中?

如何在多个文件上执行R脚本,并将每个文件的输出放在一个csv文件中?,r,bash,csv,stdin,R,Bash,Csv,Stdin,我正在做一些建模分析,我想绘制一段时间内单元类型1和单元类型2之间的边界长度 以下是我迄今为止所做的工作: 在基于python的模拟中,每100个蒙特卡罗步骤生成一个输出,通过为每个x坐标和y坐标提供单元标识单元id[总共400个单元]和单元类型[1或2],指定单元晶格的外观。我有大约1000个这样的文件列,其中包含cell_id、cell_类型、x坐标和y坐标,每100个MCS有10.000行,所有文件都位于同一个地图中 生成一个R脚本,该脚本专门计算一个输出文件的单元格类型1和单元格类型2之

我正在做一些建模分析,我想绘制一段时间内单元类型1和单元类型2之间的边界长度

以下是我迄今为止所做的工作:

在基于python的模拟中,每100个蒙特卡罗步骤生成一个输出,通过为每个x坐标和y坐标提供单元标识单元id[总共400个单元]和单元类型[1或2],指定单元晶格的外观。我有大约1000个这样的文件列,其中包含cell_id、cell_类型、x坐标和y坐标,每100个MCS有10.000行,所有文件都位于同一个地图中

生成一个R脚本,该脚本专门计算一个输出文件的单元格类型1和单元格类型2之间的边界长度。脚本的输出只是一个数字:特定文件/时间点的边界值,称为CellBoundary

我现在想做的是: R脚本只适用于一个文件。但是,当我模拟多达100.000个MCS时,我有多达1000个文件。我想根据时间绘制R脚本的输出。因此,我想生成一些代码,让R找到这1000个文件,自动一个接一个地运行它们,然后将输出存储在一个新的csv文件中,该文件只有两列:MCS和boundary length

到目前为止,我尝试的是: 我对这一切都很陌生,所以我有点被卡住了。然而,我研究了bash脚本和标准输入。 那么,如果我将1000个文件压缩成一个Zip文件,并将其用作R的标准输入,然后生成所需的1000个数据值,这样我就可以简单地绘制它,这有可能吗? 通过执行如下操作:cat compressed_files | boundarycalculation.R?我已经尝试过一些简单的例子,输入文件a b c d和R脚本说打印行,但它说: cat输入|测试.R cat:input:没有这样的文件或目录 那么,这到底是正确的做法,还是我应该寻找完全不同的东西

顺便说一句,这些是我的R脚本的一部分,如果我希望每次运行脚本时PIF文件都是不同的,那么可能会有任何用处:

# read file to a data frame
pixelDf <- read.delim("mcs_000000.pif", header = FALSE) 
# remove columns with only example values 
pixelDf <- pixelDf[, -(7:14)] 
# convert data frame to data table 
pixelDt <- data.table(pixelDf)
# set column names
setnames(pixelDt, c("cell_id", "cell_type", "x", "y"))

.....

# index horizEdgeDt with the key of vertEdgeDt (cell_id) to get both columns
# in one place, and add up the edges
cellDt <- horizEdgeDt[vertEdgeDt,.(cell_type,perimeter = numHorizEdges + numVertEdges)]

cellBoundary <- cellDt$boundary[cellDt$cell_type=="1"]
cellBoundary
在脚本的末尾,根据一个文件的输出,为每一行生成一个新的csv。 但是,这会产生以下错误:

There were 50 or more warnings (use warnings() to see the first 50)
> warnings()
Warning messages:
1: In write.csv(outputTable, "Output.csv", append = TRUE,  ... : 
attempt to set 'append' ignored
2: In write.csv(outputTable, "Output.csv", append = TRUE,  ... : 
attempt to set 'append' ignored
etc

write.csv有一个append参数。正如hrbrmstr所建议的,write.csv会为您节省一些时间和麻烦。谢谢!实际上,我一开始确实合并了它,所以它为每个输入文件生成了一个输出文件。它是这样的:“write.csvoutputable,row.names=FALSE,quote=FALSE,file=Output.csv”,所以现在我用append函数尝试了这一点,并在我的R脚本末尾添加了类似的内容。”write.csvouttable,Output.csv,append=TRUE,row.names=FALSE,quote=FALSE'但是,这会产生以下错误:'In write.csvouttable,Output.csv,append=TRUE,…:尝试设置“append”忽略。您可能会收到警告,因为该文件不存在,因此无法向其添加任何内容。但是,在第一次调用导致警告后,应该创建该文件,这样就不应该出现第二次警告。。。不过我没有看完你的剧本,所以我可能错过了一些东西…谢谢,我现在就修好了!问题不是文件不在那里,而是我显然无法将append分配给write.csv函数。所以,我用write.tableCellPermiture,file=Output.csv,append=TRUE,col.names=FALSE,row.names=FALSE,quote=FALSE解决了这个问题,这实际上正是我想要的!
# read file to a data frame
pixelDf <- read.delim("mcs_000000.pif", header = FALSE) 
pixelDf <- read.delim("fileName", header = FALSE) 
write.csv(outputTable, "Output.csv", append = TRUE, row.names = FALSE, quote = FALSE) }
There were 50 or more warnings (use warnings() to see the first 50)
> warnings()
Warning messages:
1: In write.csv(outputTable, "Output.csv", append = TRUE,  ... : 
attempt to set 'append' ignored
2: In write.csv(outputTable, "Output.csv", append = TRUE,  ... : 
attempt to set 'append' ignored
etc