2016-11-28 47 views
0

我知道我们可以使用assign为字符名称向量赋值。例如给索引的字符命名变量赋值一个

assign("target",1:5) 

但是,如果我们想改变target的第1个要素(target可以是一个向量/矩阵/列表),我们应该怎么办呢? target这里也可以是一个矩阵,所以我们可以改变一个元素,一行或一列。 我想要做这样的事情

target[1] <- 99 

如果我使用

assign("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

'目标[1] < - 99'正常工作...有什么问题? –

+0

变量名是由函数内部生成的,所以当我们想要改变变量的一个元素时,我们不知道变量名 –

+0

assign()函数的作用是创建一个新的变量,其中第一个参数为其名称。这意味着在assign(“target”,1:5)之后,将会有一个新的变量,名为'target',其值为1到5.如果你执行'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) 
} 

,并列出工作类似。

相关问题