我是R的新手,对此处发布的功能有疑问:R RStudio Resetting debug / function environment。为什么对象设置为自己(例如“getmean = getmean”等)?不能简单地写成如下:list(set, get, setmean, getmean)
答案 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
会派上用场。