如何在R中的函数中向列表中添加新成员

时间:2013-08-29 07:46:39

标签: r

我想在列表中添加一个新成员。当我这样做时如下。但是当我想在一个函数中执行它时,没有任何改变。

> 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中的指针一样的问题,但如何解决呢?

2 个答案:

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

您应该查看本地和全局变量之间的区别:

Global and local variables in R

如果在函数内定义变量,它是临时的,只属于该函数。

检查一下:

list$c<<-7