【发布时间】:2016-06-23 20:38:33
【问题描述】:
我正在尝试从多个 NCDef (.nc) 格式的文件中提取数据。我编写的代码可以运行,但速度很慢,如果有任何建议,我将不胜感激!
我的工作代码使用 RNetCDF 提取一个名为 temp 的文件,并将其转换为一个“长列表”,其中每个变量都有一个或三个维度(lat、lon 和 pft)。然后,我一次从每个变量中提取数据(varlist[j])并将其转换为数据框。然后,Adply 通过三个维度中的每一个来打破这一点。最后一步,创建files,允许我使用 cbind 和 rbind 将所有文件放在一个大数据框中。
代码如下:
setwd("C:/Users/User/Box Sync/_PhD/PhD_Research/Albedo/Data_CLM/PFTRuns/2005/")
fname<-"b40.20th.1deg.bdrd.002bc.clm2.h0.2005-"
numlist<-c('01','02','03','04','05','06','07','08','09','10','11','12')
varlist<-c(1,2,4,8,9,21)
varname<-c("lon","lat","pft","pft_wtgcell","pft_wtcol","FSR")
files<-matrix(data=NA, nrow=12, ncol=length(varlist))
`for (i in 12:12) {
temp<- paste(c(fname, numlist[i],'.nc'), collapse='')
temp<-read.nc(open.nc(temp))
temp<-structure(temp, row.names = c(NA, -288), class = "data.frame")
for (j in 3:length(varlist)) {
newname<-paste(c("Y2005", numlist[i],".", varname[j]), collapse='')
if (j<4){
assign(newname, adply(temp[,varlist[j]], c(1)))}
else{
assign(newname, adply(temp[,varlist[j]], c(1,2,3)))}
files[i,j]<-newname}}`
编辑 这是 read.nc(open.nc()) 输出的示例。 Example Output
【问题讨论】:
-
如果您正在寻找流程改进,您可能希望发布更多代码。发布
read.nc(open.nc(temp)的输出样本会有所帮助。避免多次转换到数据帧并在最后执行该操作可能会提高性能。从 plyr 包迁移到 dplyr 也可能是另一个性能提升。 -
感谢您的想法,我已经添加了该输出,并显示了更多代码。
标签: r performance loops