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 個のテキスト ファイルの平均という 1 つの値しか得られません。しかし、マスキングが適用された後の各テキスト ファイルの平均値が必要です。私はこれにコーディングを修正し、毎年の平均のベクトルを私に与えようとしました:

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

1R は、あなたの例では notでインデックス付けされてい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)

This will prevent the error and be more efficient than growing your theMeanValues vector with c() each iteration.

But, it also sounds like you may want to initialize a matrix and extract a vector from each iteration of your for-loop...but it's not really clear from your question.

于 2013-08-08T09:41:52.863 に答える