在R(列表)中缓存向量的平均值
这是对最后一行代码的跟进,特别是关于最后一行代码在R(列表)中缓存向量的平均值,r,caching,mean,R,Caching,Mean,这是对最后一行代码的跟进,特别是关于最后一行代码 list(set = set, get = get, setmean = setmean, getmean = getmean) 我不明白列表在做什么。相关问题的答案如下: list()返回包含刚才定义的所有函数的“特殊向量” 对我来说没什么意义。我认为makeVector应该返回一个对象,该对象具有适当的set和get方法,但是现在可以确定这个list()是如何实现的。左侧的set是什么,右侧的set是什么 makeVector <-
list(set = set, get = get, setmean = setmean, getmean = getmean)
我不明白列表
在做什么。相关问题的答案如下:
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)
}
makeVector
我希望这有助于在我的文章的第二篇约翰·霍普金斯R编程作业中,我对这两个函数进行了广泛的演练
这就是说,下面是关于list()
语句如何在makeVector()
中工作的答案
步骤3:通过返回列表()创建新对象
下面是makeVector()
函数操作中“魔力”的另一部分。代码的最后一部分将这些函数分配为列表()
中的一个元素,并将其返回到父环境
list(set = set, get = get,
setmean = setmean,
getmean = getmean)
当函数结束时,它返回一个类型为makeVector()
的完全形成的对象,供下游R代码使用。关于这段代码的另一个重要微妙之处是,列表中的每个元素都是独立的。也就是说,列表中的每个元素都使用elementName=value
语法创建,如下所示:
list(set = set, # gives the name 'set' to the set() function defined above
get = get, # gives the name 'get' to the get() function defined above
setmean = setmean, # gives the name 'setmean' to the setmean() function defined above
getmean = getmean) # gives the name 'getmean' to the getmean() function defined above
命名列表元素允许我们使用$
按名称访问函数,而不是使用提取操作符的[[
形式(如myVector[[2]]()
)来获取向量的内容
这里需要注意的是,cachemean()
函数需要类型为makeVector()
的输入参数
aResult <- cachemean(1:15)
你知道R中的列表是什么吗?它是R中的“基本”类型,基本上是一个向量,其元素是任意的R对象(考虑函数也是R中的对象)。列表的元素可以通过标记=值
范例命名。列表(set=set)
意思是:创建一个列表,其第一个元素名为set
,并且具有set
对象的值(之前已定义)@nicola:我刚开始讲R
,显然我对此不太清楚。所以左手边的set
是可以用来访问右手边的set
函数的名称。因此,如果代码是setValue,你可能应该通过介绍R来完成。闭包和函数工厂似乎是b对你目前的理解水平来说,这太高级了。@Roland:嗯,是的,我知道这对我来说是高级的——这就是为什么我在苦苦挣扎。你对我上面的评论有什么见解吗?如果我的理解是正确的,会不会有不同的名字(在课程中给出这个例子时)你说得更清楚了吗?如果你理解范围界定,这里没有什么令人困惑的。如果你不理解范围界定,你就根本无法理解这个例子。
list(set = set, get = get,
setmean = setmean,
getmean = getmean)
list(set = set, # gives the name 'set' to the set() function defined above
get = get, # gives the name 'get' to the get() function defined above
setmean = setmean, # gives the name 'setmean' to the setmean() function defined above
getmean = getmean) # gives the name 'getmean' to the getmean() function defined above
aResult <- cachemean(1:15)
> aVector <- 1:10
> cachemean(aVector)
Error in x$getmean : $ operator is invalid for atomic vectors