【发布时间】:2017-01-29 08:09:20
【问题描述】:
这是对Caching the mean of a Vector in R 的跟进,特别是关于最后一行代码
list(set = set, get = get, setmean = setmean, getmean = getmean)
我不明白list 在做什么。链接问题给出的答案:
list() 返回包含刚刚定义的所有函数的“特殊向量”
对我来说没有多大意义。我认为makeVector 应该返回一个具有适当set 和get 方法的对象,但现在确定list() 是如何做到这一点的。左侧的set 是什么,右侧的set 是什么?
makeVector <- function(x = numeric()) {
m <- NULL
set <- function(y) {
x <<- y
m <<- NULL
}
get <- function() x
setmean <- function(mean) m <<- mean
getmean <- function() m
list(set = set, get = get,
setmean = setmean,
getmean = getmean)
}
【问题讨论】:
-
你知道R中的
list是什么吗?它是 R 中的“基本”类型,基本上是一个向量,其元素是任意 R 对象(考虑函数也是 R 中的对象)。列表的元素可以通过tag=value范式命名。list(set=set)表示:创建一个列表,其第一个元素名为set,并具有set对象的值(之前已定义)。 -
@nicola:我刚从
R开始,所以显然我不清楚这一点。所以左侧的set是可以用来访问右侧的set函数的名称。因此,如果代码为setValue <- function(y),则list参数将为set = setValue。所以初始化数据的“方法”仍然是set,它会调用函数setValue。那是对的吗?也就是setValue不能直接调用? -
你可能应该读完 An Introduction to R。闭包和函数工厂对于你目前的理解水平来说似乎太高级了。
-
@Roland:嗯,是的,我知道这对我来说很先进——这就是我苦苦挣扎的原因。您对我上面的评论有任何见解吗?如果我的理解是正确的,不同的名字(当这个例子在课程中给出时)不会更清楚吗?
-
如果您了解范围界定,这里没有什么令人困惑的地方。如果您不了解范围界定,则根本无法理解此示例。