很长的一个“列表”;。asc";R中的文件并应用do.call。如何处理?
希望你能帮我。我正在编写一个代码,该代码允许我将很长的.asc文件列表放在一起(它们包含307200(640*480)像素,每个文件都有来自热红外相机的温度信息)。我开发的代码只包含5个文件。但是,当试图将代码应用于整个文件列表(例如,或多或少4000个.asc文件)时,R会被卡住。我被告知应该使用批处理或任何优化代码来修改代码。然而,我不是这个领域的专家,我需要一些帮助。 我在这里包括了代码的第一部分,它列出了所有的.asc文件,并将它们放在一个单数据框中很长的一个“列表”;。asc";R中的文件并应用do.call。如何处理?,r,list,large-data,R,List,Large Data,希望你能帮我。我正在编写一个代码,该代码允许我将很长的.asc文件列表放在一起(它们包含307200(640*480)像素,每个文件都有来自热红外相机的温度信息)。我开发的代码只包含5个文件。但是,当试图将代码应用于整个文件列表(例如,或多或少4000个.asc文件)时,R会被卡住。我被告知应该使用批处理或任何优化代码来修改代码。然而,我不是这个领域的专家,我需要一些帮助。 我在这里包括了代码的第一部分,它列出了所有的.asc文件,并将它们放在一个单数据框中 temp = list.files(
temp = list.files(pattern="*.asc")
myfiles = do.call("cbind", lapply(temp, function(x) read.csv(x,
sep="\t",dec=",",stringsAsFactors=FALSE,header=FALSE)))
mf<-myfiles[c(-1:-8),]
colnames(mf)<-seq(1,ncol(mf),by=1)
rownames(mf)<-seq(1,nrow(mf),by=1)
for (i in 1:ncol(mf)){
mf[,i]<-sub(",",".",mf[,i])
mf[,i]<-sub("\t","",mf[,i])
}
for(i in 1:ncol(mf)){
mf[,i]<-as.numeric(mf[,i])
}
temp=list.files(pattern=“*.asc”)
myfiles=do.call(“cbind”),lappy(temp,函数(x)read.csv(x,
sep=“\t”,dec=“,”,stringsAsFactors=FALSE,header=FALSE)))
M在什么地方卡住了?在第二行中,因为您使用了太多内存?请分析您的代码以确定瓶颈。一个问题是for
循环。你应该避开它们。例如,我甚至不知道第一个for
循环在那里做什么。您已经在读取文件时为小数点指定了正确的字符和正确的列分隔符。为什么要使用sub
替换数据中不应该存在的内容?如果您不运行第一个for
循环(将每个数字变量转换为字符变量),则不需要第二个for
循环。此外,如果您需要for
循环,如果您使用以下行替换它们,则可能可以避免使用它们:mf[]您需要一起读取所有文件吗?你不能一次分析一个文件吗?大卫H:是的,它被卡住了,因为它占用了大量内存,大约8克。有人建议我通过并行化或批处理来改进我的代码。但我在这方面没有经验。