2016-11-28 10 views
0

assignを使用して、文字の名前ベクトルに値を割り当てることができます。我々は(ベクトル/行列/リストすることができtargettargetの第一の要素を変更したい場合は インデックス付きの変数variableに値を代入する

assign("target",1:5) 

たとえば

については、我々はそれをどのようにすればよいですか? targetは行列でもかまいませんので、1つの要素、1つの行または1つの列を変更できます。私は

assign("target[1]",99) 

を使用する場合にのみtarget[1]という名前の新しいオブジェクトを生成し、値がここで99ある

target[1] <- 99 

のような何かをしたい は

# This function is meaningless, just used to show my situation 
# variable_name is a character 
example_function <- function(variable_name){ 
    assign(variable_name,1:5) 

    if(rnorm(1)>1){ 
    variable_name[1] <- 99 #This will not work and I just need some function to achive this purpose 
    } 
} 
example_function("justAname") 
シンプルかつ裁判例です
+0

'target [1] < - 99'は問題なく動作します...どうしたのですか? –

+0

変数名は内部の関数によって生成されるので、その変数の要素の1つを変更したいときは正確な変数名を知らない。 –

+0

'assign()'関数は、その名前。これは、 'assign(" target "、1:5)の後に、1から5の値を持つ' target'という新しい変数が存在することを意味します。 'print(target)'を実行すると、新しい変数が見えます。したがって、 'target [1] < - 99'を実行すると' target'が通常の変数として扱われ、代入を行うことができます。試してみてください。 –

答えて

1

代替方法として、[<-機能を使用することもできます。

f = function(variable_name){ 
    assign(variable_name,1:5) 
    if(rnorm(1)>1){ 
    `[<-`(eval(as.name(variable_name)),i = 1, value = 99) 
    } 
    get(variable_name) 
} 

これも同様に行列

f_mat = function(variable_name){ 
    assign(variable_name,matrix(1:25,nrow = 5)) 
    if(rnorm(1)>1){ 
    `[<-`(eval(as.name(variable_name)),i = 1, j = , value = 99) # for 1st row 
    # `[<-`(eval(as.name(variable_name)),i = , j = 1, value = 99) # for 1st col 
    #specify i and j for ith row jth column 
    } 
    get(variable_name) 
} 

とリストで動作するはずです。

関連する問題