在R中缓存Vector的均值

时间:2014-07-23 07:49:40

标签: r caching mean

我正在学习R并且在实践作业中遇到了一些代码。

 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创建一个特殊的&#34;向量&#34;,即 实际上是一个包含

功能的列表
  1. 设置向量的值
  2. 获取向量的值
  3. 设置平均值
  4. 得到平均值
  5. 但我无法理解该函数的工作原理,除非它为该特定环境中的变量 m 指定平均值。

2 个答案:

答案 0 :(得分:13)

m <- NULL首先将均值设置为NULL作为未来值的占位符

set <- function(y) {x <<- y; m <<- NULL}定义了一个将向量x设置为新的函数 向量,y,并将均值m重置为NULL

get <- function() x返回向量x

setmean <- function(mean) m <<- mean将平均值m设置为mean

getmean <- function() m返回均值m

list(set = set, get = get,setmean = setmean,getmean = getmean)返回&#39;特殊内容 矢量&#39;包含刚刚定义的所有函数

答案 1 :(得分:5)

我认为理解这个例子的一个好方法是尝试以下方法:

首先检查当你使用make_Vector函数时,你现在有四种不同的设置

> mvec <- makeVector()
> x <- 1:4
> mvec$set(x)
> mvec$get()
> [1] 1 2 3 4
> mvec$getmean()
> NULL
> mvec$setmean(3.4)
> mvec$getmean()
> 3.4

3.4这不是正确的意思,我把这些数字放在那里你可以检查你可以设置你想要的任何数字。

作业的第二部分是以下内容:

cachemean <- function(x, ...) {
        m <- x$getmean()
        if(!is.null(m)) {
                message("getting cached data")
                return(m)
        }
        data <- x$get()
        m <- mean(data, ...)
        x$setmean(m)
        m
}

这些部分或代码检查您是否具有感兴趣的载体的平均值。如果这些存在,那么您不需要计算,您可以使用缓存变量。

 我为平均值设置了一个错误的数字,然后您可以看到我已经设置了平均值,如下所示:

> cachemean(mvec)
> 3.4

您必须传递示例中使用的原始mvec列表