循环应用蒙版和创建手段的向量

时间:2013-08-08 09:35:00

标签: r loops

我想在将掩码应用到多个文本文件(1,408)后创建一个均值向量。每个文件对应一个变量&从1950年到2013年,所以该变量有64个文件,有22个变量。这是我在R中应用的编码:

dataDir <- "C:\\dir\\"
patternC <-"Var1_"
filesSizeC = sort(list.files(dataDir,patternC))

  for (i in 1:length(filesSizeC)) {
   theData<-read.table(paste(dataDir,filesSizeC[i],sep=""),header=F,sep=",")
}

mask <- read.csv("http://dl.dropbox.com/s/2tbffe65i53afj1/examplemask.txt",
header=F)

product <- mask * theData
product[product == 0] <- NA
mean(product$V1, na.rm=TRUE)

这只为64个文本文件提供了一个值,即平均值。但是我想要在应用遮罩之后每个文本文件的均值。我修改了编码,试着给我一个每年手段的载体:

for (i in 1:length(filesSizeC)) {
theData<-read.table(paste(dataDir,filesSizeC[i],sep=""),header=F,sep="\t")  
pdt <- mask*theData

if (i>0) {
    theMeanValues <- c(theMeanValues,mean(pdt))

  } else {
  theMeanValues <- c(mean(pdt))
 }
}

错误消息是:

Error: object 'theMeanValues' not found

我不太确定如何根据我的需要改变它。

基本上我想实现这个目标:

year | Var1_Masked_Mean | Var2_Masked_Mean | etc...
1950
1951
 .
 .
 .
2013

我希望我的要求有意义!

由于

2 个答案:

答案 0 :(得分:1)

R在您的示例中被1而不是0编入索引......

for (i in 1:length(filesSizeC)) {

所以改变这个

if (i>0) {
  ...
  }

if (i>1) {
  ...
  }

在循环的第一次迭代中i==1,您将创建theMeanValues变量。

答案 1 :(得分:0)

您必须使用以下内容初始化theMeanValues

theMeanValues <- vector(length=length(filesSizeC))

然后,您可以将每次迭代的结果mean(pdt)存储到该向量中的位置:

theMeanValues[i] <- mean(pdt)

这样可以防止错误,并且比每次迭代theMeanValues增长c()向量更有效。

但是,听起来你可能想要初始化矩阵并从for - 循环的每次迭代中提取一个向量......但是你的问题并不是很清楚。