如何在不直接在R中键入对象的情况下为对象赋值

  • 本文关键字:对象 赋值 情况下 r assign
  • 更新时间 :
  • 英文 :


假设我使用assign函数创建了一个列表:

name <- "test_list"
assign(name, list(a = c(1,2), b = c(3,4)))

现在,假设我想给test_list分配一个新值,而不需要直接键入它(就像在我希望自动生成具有特定名称的对象的情况下(。

以下两种尝试都没有成功:

1.(

as.name(name)$a[[1]] <- 5

2.(

eval(expr = as.name(name))$a[[1]] <- 5

有什么想法吗?

我们可以使用

assign(name, `[<-`(get(name),  get(name)$a[1], 5))

或者使更加明确

assign(name, {dat <- get(name); dat$a[1] <- 5; dat})

或者从全局环境中提取对象并分配

.GlobalEnv[[name]]$a[1] <- 5
test_list
#$a
#[1] 5 2
#$b
#[1] 3 4

一种方法是使用eval(parse(text=expression)),它通常可以在紧急情况下投入使用。但我会尽量避免。

name <- "test_list"
assign(name, list(a = c(1,2), b = c(3,4)))
eval(parse(text=paste0(name,"$a[[1]] <- 5")))
test_list
$a
[1] 5 2
$b
[1] 3 4

最新更新