如何检索存储在列表中的对象的引用?

时间:2015-10-30 11:11:25

标签: r list reference

我有一个列表l

l <- list(c(1,2),c(3,4))

我想检索此列表第一个元素的引用。 换句话说,如果我这样做,我想要这样:

l1 <- getRef(l,1)
l1[1] <- 0

然后l也会被修改。

我怎么能在R?中做那样的事情?

2 个答案:

答案 0 :(得分:3)

R不支持这一点,因为在R中,所有对象(环境除外)都具有值语义,而不是引用语义。

这样做的唯一方法是通过环境(或建立在环境之上的东西,例如R6类)。

作为一个简单的例子(注意你需要在这里提供名字):

lenv = function (...) list2env(list(...))
l = lenv(x = lenv(a = 1, b = 2), y = lenv(a = 3, b = 4))

现在你可以做到

l1 = l$x
l1$a = 2
l$x$a
# 2

...但这是错综复杂,效率低下的,而且大部分时间都不是你想做的事情。接受R具有价值语义而不是反对它的事实。

答案 1 :(得分:2)

您可以使用makeActiveBinding这样的功能:

l <- list(c(1,2),c(3,4))
makeActiveBinding("l1", function() l, .GlobalEnv)
l[1] <- 0
l1
#[[1]]
#[1] 0
#
#[[2]]
#[1] 3 4

然而,这种方式l1是只读的。

虽然,我一般不鼓励这样的结构。