我知道我们可以使用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")
答案 0 :(得分: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)
}
并列出类似的内容。