Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R(列表)中缓存向量的平均值_R_Caching_Mean - Fatal编程技术网

在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