2013-03-07 17 views
8

データセットをクリーニングしているので、別の変数に応じて変数を選択する必要があります。 ID = 1とすると、変数VAR01をデータフレームに導入する必要があります。ID = 2の場合は、VAR02などが必要です。Rの変数名への文字列

したがって、stringf機能を持つID番号の変数名 'VAR'を貼り付けるforループを実行しています。問題は、文字列を関数名として理解するためにRが必要であることです。

私はフォーラムで私のために動作しません。このソリューションを、見つけた

> variable1 = c("monday", "tuesday", "wednesday") 

> var_name = "variable1" 

> eval(parse(text=var_name)) 
[1] "monday" "tuesday" "wednesday" 

問題は、私は、変数を参照するためにそれを使用することはできませんです。

> eval(parse(text=var_name)) = c(1,2,3) 
Error in file(filename, "r") : cannot open the connection 
In addition: Warning message: 
In file(filename, "r") : 
cannot open file 'variable1': No such file or directory 

を持っています誰にでも解決策がありますか?

ありがとうございます!

+0

データの内容と目的の出力の例を挙げることはできますか? – alexwhan

答えて

5

あなたはgetを使用することができます。

result = get(var_name) 

getsetの多用があなたの代わりに変数のlist年代の使用を開始する場合があります示唆しているが:

l = list(variable1 = c(1,2,3)) 
l$variable1 = c(4,5,6) 
+0

彼は毎週、火曜日、水曜日に1,2,3を割り当てたいと思うのですか?確かに、もし私がそれを得たのであれば。 – Arun

+0

これはタイトルが言っているとおりであり、OPはこの場合リストを使用する必要があります。 –

9

あなたはassign()

を使用することができます
var_name <- 'test' 
assign(var_name,1:3) 
test 

注:assignはそれが呼び出される環境で変数を作成します。あなたがいたのであれば、このような関数内assignを呼び出すには:関数を呼び出す

myfun <- function(var) { 
    assign(eval(substitute(var)), 5) 
    print(get(var)) 
} 

割り当てmy_varを環境機能を実行した後に破壊された時のためだけに作成された機能、内5の値。

> myfun("my_var") 
# [1] 5 

> my_var 
# Error: object 'my_var' not found 

あなたが関数呼び出し後の値を保持したいのであれば、そして、あなたはあなたのタスクが実行される時間「のthro変数があるでしょう環境を指定する必要があります。たとえば、global environment

myfun <- function(var, env = globalenv()) { 
    assign(eval(substitute(var)), 5, envir = env) 
    print(get(var)) 
} 

> myfun("my_var") 
# [1] 5 
> my_var 
# [1] 5 
+2

'assign'関数は、(質問の最初の部分が言及するように)データフレームに簡単に割り当てません。 'fortune(236)'も参照してください。 –

2

よくある質問7.21です。

このFAQの最も重要な部分は、グローバル環境でこれを行うのではなく、リストを使用するように指示する最後です。データフレーム(これは既にリストです)でこれを行いたいと言いますので、これは簡単になります。この場合eval(parse(text=...))を使用して

mydf <- data.frame(g=c('a','b','c')) 
ID <- 1 

mydf[[ sprintf("VAR%02d",ID) ]] <- 1:3 
mydf 

はあなたがニューヨークからボストンに行くので、あなたの目的地へのボストンからニューヨークへのあなたの原点からの方向と方向を求めるために方法を知っていると言うようなものです:のようなものを試してみてください。場合によってはそれほど悪くはないかもしれませんが、ロンドンからパリに向かおうとしている場合は少し外れています(そしてあなたの例は火星経由でニューヨークからボストンへ行くことになります)。 fortune(106)を参照してください。

+0

+1 [fortune(106)](http://cran.r-project.org/web/packages/fortunes/vignettes/fortunes.pdf):答えがparse()の場合、通常質問を再考する必要があります。 -Thomas Lumley - R-help(2005年2月) – zx8754