2

重複の可能性:
R: 文字列を変数名に変換する方法は?

R では、繰り返し変数名を作成し、各変数に値を割り当てる for ループを作成しています。

これは簡略化されたバージョンです。意図は、反復変数 i の値に基づいて変数の名前を作成し、新しい変数に NA 値を入力することです。

(問題が発生するのはループそのものではなく、変数の作成方法と割り当て方法に関係しているため、以下では 1:1 だけ繰り返します。)

for (i in 1:1) {

    #name variable i "Variablei"
    varName = paste("Variable", as.character(i), sep="")

    #fill variable with NA values
    varName = rep(NA, 12)

    print(varName)
    print(Variable1)
}

これで、varName は次のように出力されます

 [1] NA NA NA NA NA NA NA NA NA NA NA NA

Variable1 が見つかりません。

これがバグである理由をある程度理解しています。最初の行で、varName は、エントリが文字列 "Variable1" だけのベクトルになります。次に、NA 値を保持するために varName が再割り当てされます。そのため、Variable1 を印刷しようとすると、存在しません。

より一般的な問題は、割り当てと平等だと思います。最初の行では、varName を新しく作成した文字列と等しくしたいのですが、次の行では、varName をNA 値ベクトルに割り当てたいと考えています。

その区別を作成する最も簡単な方法は何ですか? 私はまた、これを行うためのまったく異なる、より良い方法にもオープンです。

編集:問題を誤解していたため、タイトルを変更しました。

4

1 に答える 1

13

割り当ては次のように機能します。

<varname> = <expression>

またはより伝統的に

<varname> <- <expression>

したがって、コードでは、にしか割り当てられていませんvarName。割り当て対平等ではなく、割り当てだけです。あなたは見たいと思うかもしれませんassign

for (i in 1:5) {
  assign(paste0("Variable", i), 10*i)
} 

おもちゃの例として。

さらに、コメントに記載されているように、アプリケーションにはおそらくより良いアプローチがあります。たとえば、ベクトルを使用するだけではなく、 、などmyvectorと呼ばれる変数を使用する代わりに、などを参照できます。Variable1Variable2myvector[1]myvector[2]

例として、あなたが一緒に働くことを計画していたとしましょう。

Variable1 <- 'foo'
Variable2 <- 'bar'
Variable3 <- 'baz'

次に、アプローチを変更して設定することができます

mydata <- c('foo', 'bar', 'baz')

以前はVariable2( を含む'bar') を使用していた場所で、代わりにmydata[2]( も含む'bar') を使用します。ここでのポイントは、変数の長いリストよりも、R でベクトルとデータフレームを操作する方がはるかに簡単だということです。

さらに進んで、エントリに名前を付けることができます。

names(mydata) <- paste0("V", 1:3)

mydata["V2"]次に、retrieveに書き込むことができますbar

于 2012-11-03T21:56:31.283 に答える