将对象设置为自身

时间:2014-05-25 05:42:49

标签: r

我是R的新手,对此处发布的功能有疑问:R RStudio Resetting debug / function environment。为什么对象设置为自己(例如“getmean = getmean”等)?不能简单地写成如下:list(set, get, setmean, getmean)

3 个答案:

答案 0 :(得分:1)

区别在于

aa <- list(set, get, setmean, getmean)

是未命名的列表,

bb <- list(set=set, get=get, setmean=setmean, getmean=getmean)

是一个命名列表。比较names(aa)names(bb)

=不是作业。它实际上只是给列表项添加标签。这是R程序员尝试仅使用<-进行分配并使=具有这种特殊含义的原因之一。你也可以轻松完成

cc <- list(apple=set, banana=get, ornage=setmean, grape=getmean)
cc$apple()

它不必是完全相同的名称。

答案 1 :(得分:0)

因为list(set, get, setmean, getmean)不会使用正确的名称标记列表元素。以下是标记和未标记列表之间差异的示例:

> list(1, 2, 3)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

> list(foo=1, bar=2, baz=3)
$foo
[1] 1

$bar
[1] 2

$baz
[1] 3

请注意,在参数列表的上下文中,=用于提供命名参数,它不执行任何分配(与<-不同)。因此,list(foo=1, bar=2, baz=3) 非常list(foo<-1, bar<-2, baz<-3)不同。

答案 2 :(得分:0)

问题已得到解答,但您也可以这样做以达到相同的效果。

> object <- c('set', 'get', 'setmean', 'getmean')
> setNames(object = as.list(object), nm = object)
# $set
# [1] "set"
# 
# $get
# [1] "get"
# 
# $setmean
# [1] "setmean"
# 
# $getmean
# [1] "getmean"

报价取决于这些值实际上是什么 你可以像这样设置不同的名字

> setNames(as.list(object), letters[1:4])
# $a
# [1] "set"
#
# $b
# [1] "get"
#
# $c
# [1] "setmean"
#
# $d
# [1] "getmean"
使用setNames时,

lapply会派上用场。