0

私はRにかなり慣れていないので、実行しようとしているループについていくつか質問があります。ループでやりたいことを守って、できる限り自分自身を説明しようと思います。

for(i in (1988:1999,2000:2006)){
    yearerrors=NULL
    binding=do.call("rbind.fill",x[grep(names(x), pattern ="1988.* 4._ data=")])
    cmeans=lapply(binding[,2:ncol(binding)],mean)
    datcmeans=as.data.frame(cmeans)
    finvec=datcmeans[1,]
    kk=0
    result=RMSE2(yields[(kk+1):(kk+ncol(binding))],finvec)
    kk=kk+ncol(binding)
    yearerrors=c(result)
}

yearerrors
  1. まず、ループがデータのファイル名を反復処理することを望みます。具体的には、1988年から2006年にかけて、1988年が現在拘束力のある声明に掲載されている場所です。xはRに入力されたデータファイルのリストであり、1988はファイル名の一部です。だから、私は1988、1989、...、2006で始まるファイル名を持っています。

  2. 収量は数値ベクトルであり、ループに示されているように、ベクトルのインデックスを関数RMSE2に入力したいと思います。たとえば、最初の反復では、バインディング内の列数のインデックス1を使用する必要があります。次に、次の反復では、最初のインデックスを前の反復で終了したものより1大きくし、次のバインディングステートメントの列数に等しい数まで続けます。私が書いたものがこれを達成するかどうかはわかりません。

  3. 最後に、これらの各結果をベクトルyearerrorsに格納し、後でこのベクトルにアクセスしたいと思います。

よろしくお願いします!

4

1 に答える 1

1

OK、データの構造が非常に不明確であるため、ここには多くの当て推量があります。RMSE2関数が何であるかはわかりません(詳細は説明していません)。先日の質問に基づいて、データは.csvファイルにあると想定します。私はあなたの問題を突き刺すつもりです。

私は、ファイルを読み込んでいる間に結合されたデータフレームを構築することから始めます。そのようです:

#Set your working directory to the folder containing the .csv files
#I'm assuming they're all in the form "YEAR.something.csv" based on your pattern matching

filenames <- list.files(".", pattern="*.csv") #if you only want to match a specific year then add it to the pattern match
years <- gsub("([0-9]+).*", "\\1", filenames)

df <- mdply(filenames, read.csv)
df$year <- as.numeric(years[df$X1]) #Adds the year
#Your column mean dataframe didn't work for me
cmeans <- as.data.frame(t(colMeans(df[,2:ncol(df)])))

そうすると、何を達成しようとしているのかを知ることが難しくなります。あなたdatcmeansは1行のdata.frameなので、datcmeans[1,]何も変更しません。したがって、データフレーム(または数値ベクトル)の1つの行がRMSE2関数に必要な引数である場合は、それを渡すことができますdatcmeanscmeans私の例では)。

それ以降のあなたのコードは私にはほとんど判読できません。yieldsどのように見えるか、またはRMSE2がどのように機能するかを知らなければ、これ以上支援することはほとんど不可能です。

ここでループを実行する場合kk=kk+ncol(binding)、最初の反復の最後に設定しても役に立たないと言います。設定したのでkk=0、kkはに等しくなりませんncol(binding)。つまり、Iあなたが望むものではなく、推測しています。ここで必要なものについての私の推測です(ループが必要であると仮定します)。

yearerrors=vector("numeric", ncol(df)) #Create empty vector ahead of loop

for(i in 1:ncol(df)) {
  yearerrors[i] <- RMSE2(yields[i:ncol(df)], finvec)
}
yearerrors

正直なところ、このように機能する関数を想像することはできませんが、それはあなたのコードの最も論理的な適応のようです。

于 2013-02-26T23:27:50.917 に答える