我正在学习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;,即
实际上是一个包含
但我无法理解该函数的工作原理,除非它为该特定环境中的变量 m 指定平均值。
答案 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列表