我想在列表中添加一个新成员。当我这样做时如下。但是当我想在一个函数中执行它时,没有任何改变。
> a = list( x=4, y=2)
> a
$x
[1] 4
$y
[1] 2
> a$c = 7
> a
$x
[1] 4
$y
[1] 2
$c
[1] 7
使用功能......
> addNew(a)
> a
$x
[1] 4
$y
[1] 2
功能是:
addNew = function(list){
list$c = 7
}
也许它有点像c中的指针一样的问题,但如何解决呢?
答案 0 :(得分:1)
您必须返回并分配修改后的列表:
a <- list(x=4, y=2)
addNew <- function(l) {
l$c <- 7
return(l)
}
a <- addNew(a)
编辑:正如@mitra所提到的,你可以使用<<-
:
a <- list(x=4, y=2)
addNew <- function() {
a$c <<- 7
}
但是这会改变R中函数的典型行为。大多数用户都不希望函数具有改变全局环境等副作用。
请阅读Patrick Burns'R Inferno(第35页):
如果您认为自己需要&lt;&lt; - ,请再想一想。如果反思你仍然认为你 需要&lt;&lt; - 再想一想。只有当你的老板因为愤怒而变红 如果你暂时屈服于诱惑,就什么都不做。那里 已被提议(不超过半开玩笑)以消除&lt;&lt; - 来自 语言。这不会消除全球任务,只会迫使你使用 assign函数来实现它们。
答案 1 :(得分:0)