9

データセットをクリーニングしていますが、別の変数に応じて変数を選択する必要があります。ID = 1if 、データ フレームに変数VAR01、 if ID = 2、 I needなどを導入する必要があるとしましょうVAR02

したがって、変数名 'VAR' と ID 番号をstringf関数で貼り付ける 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

誰かが解決策を持っていますか?

ありがとう!

4

3 に答える 3

11

使用できますassign()

var_name <- 'test'
assign(var_name,1:3)
test

注:assignそのため、呼び出された環境で変数が作成されます。したがって、次assignのような関数内で呼び出す場合:

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

関数を呼び出すと、関数内に値 5 が割り当てmy_varられます。その環境は、関数が実行された後に破棄されるときだけ作成されます。

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

> my_var
# Error: object 'my_var' not found

そのため、関数呼び出しの後に値を保持したい場合は、タスクが実行されるまで変数を持つ環境を指定する必要があります。たとえば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
于 2013-03-07T12:12:56.727 に答える
5

使用できますget

result = get(var_name)

と を多用するとget、代わりに変数のsetを使い始めることをお勧めします:list

l = list(variable1 = c(1,2,3))
l$variable1 = c(4,5,6) 
于 2013-03-07T11:58:32.750 に答える