1

在将掩码应用于多个文本文件(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

我希望我所问的有道理!

谢谢

4

2 回答 2

1

R在您的示例中1没有被索引...0

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

所以改变这个

if (i>0) {
  ...
  }

if (i>1) {
  ...
  }

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

于 2013-08-08T09:42:24.317 回答
0

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

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

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

theMeanValues[i] <- mean(pdt)

这将防止错误并且比每次迭代都增加theMeanValues向量更有效。c()

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

于 2013-08-08T09:41:52.863 回答