【发布时间】:2016-11-28 21:16:19
【问题描述】:
我知道我们可以使用assign 将值分配给字符名称向量。例如
assign("target",1:5)
但是,如果我们想改变target的第一个元素(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")
【问题讨论】:
-
target[1] <- 99工作正常...有什么问题? -
变量名是由内部函数生成的,所以当我们想更改该变量的一个元素时,我们不知道确切的变量名
-
函数
assign()所做的是以第一个参数作为名称的新变量。这意味着在assign("target",1:5)之后,将存在一个名为target的新变量,其值为1 到5。如果您执行print(target),您将看到您的新变量。因此,执行target[1] <- 99会将target视为普通变量,允许您进行赋值。试试看,效果很好 -
是的,我明白了。我会更新我的帖子来说明我的情况。
-
replace(eval(as.name(variable_name)), 1, 99)可能