2013-10-23 44 views
0

我有這個功能,我想用50個不同的數據集運行五十(50)次。我必須每次更改第4,18和20行的索引。 (這是每次運行中唯一改變的參數)。使用R中函數內的索引,每次運行後增加1個單位

1 myfunc <- function(file){ 
2 library(ncdf) 
3 setwd("C:\\Users\\Desktop\\data") 
4 AMS <- read.csv("C:\\Users\\Desktop\\data\\myarray.***index***.csv",header=FALSE) 
5 
6 xval <- seq(-124.5,-101.5,by=1) 
7 yval <- seq(31.5,48.5,by=1) 
8 nx <- length(xval) 
9 ny <- length(yval) 
10 data_temp <- array(NA, dim=c(nx,ny)) 
11 for(i in 1:nx){ 
12 for(j in 1:ny) { 
13  data_temp[i,j] <- (AMS[i,j]) 
14 } 
15 } 
16 dimx <- dim.def.ncdf("lon", "degreesE", xval,unlim=FALSE) 
17 dimy <- dim.def.ncdf("lat", "degreesN", yval,unlim=FALSE) 
18 dimt <- dim.def.ncdf("time", "year", ***index*** , unlim=TRUE) 
19 vari <- var.def.ncdf("precipt", "mm/d", list(dimx,dimy,dimt),999999.999) 
20 ncnew <- create.ncdf("output.***index***.nc", var) 
21 put.var.ncdf(ncnew, vari,data_temp, start=c(1,1,1), count=c(nx,ny,1)) 
22 close.ncdf(ncnew) 
} 

有沒有什麼簡單的方法可以做到這一點?

+0

這樣做'lapply(VEC,MYFUNC)',其中'myfun'將索引作爲唯一參數,'vec'是所有索引的向量。 – Thomas

+0

你熟悉'paste'嗎? –

回答

2

你可以試一下,假設你想要的功能採取所謂的指數作爲參數,

myfunc <- function(file_index){ 
2 library(ncdf) 
3 setwd("C:\\Users\\Desktop\\data") 
4 AMS <- read.csv(sprintf("C:\\Users\\Desktop\\data\\myarray.%d.csv", file_index),header=FALSE) 
5 
6 xval <- seq(-124.5,-101.5,by=1) 
7 yval <- seq(31.5,48.5,by=1) 
8 nx <- length(xval) 
9 ny <- length(yval) 
10 data_temp <- array(NA, dim=c(nx,ny)) 
11 for(i in 1:nx){ 
12 for(j in 1:ny) { 
13  data_temp[i,j] <- (AMS[i,j]) 
14 } 
15 } 
16 dimx <- dim.def.ncdf("lon", "degreesE", xval,unlim=FALSE) 
17 dimy <- dim.def.ncdf("lat", "degreesN", yval,unlim=FALSE) 
18 dimt <- dim.def.ncdf("time", "year", file_index , unlim=TRUE) 
19 vari <- var.def.ncdf("precipt", "mm/d", list(dimx,dimy,dimt),999999.999) 
20 ncnew <- create.ncdf(sprintf("output.%d.nc",file_index), var) 
21 put.var.ncdf(ncnew, vari,data_temp, start=c(1,1,1), count=c(nx,ny,1)) 
22 close.ncdf(ncnew) 
} 

然後

lapply(1:50, myfunc) 
+0

@ damienfrancois;謝謝你的好回答。不幸的是,當我使用「lapply」這個參數時,我得到了這個錯誤信息:「match.fun(FUN):object'myfunc'not not found。' – SaZa

+0

我檢查finction是否有使用」list.files()「在那裏,我的意思是在工作目錄。 – SaZa

相關問題