使用index为带有变量的字符赋值

时间:2016-11-28 21:16:20

标签: r character

我知道我们可以使用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")

1 个答案:

答案 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)
}

并列出类似的内容。