缓存R中向量的平均值
我正在学习R,在实践作业中遇到了一些代码缓存R中向量的平均值,r,caching,mean,R,Caching,Mean,我正在学习R,在实践作业中遇到了一些代码 makeVector <- function(x = numeric()) { m <- NULL set <- function(y) { x <<- y m <<- NULL } get <- function() x setmean <- func
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)
}
makeVectorm我认为理解此示例的一个好方法是尝试以下内容:
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
}
首先检查使用函数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
您必须通过示例中使用的原始mvec列表此答案摘自我在2016年作为约翰霍普金斯大学R编程课程的社区导师撰写的一篇文章:
makeVector()和cachemean()的总体设计
cachemean.R文件包含两个函数,makeVector()
和cachemean()
。文件中的第一个函数,makeVector()
创建一个存储向量及其平均值的R对象。第二个函数,cachemean()
需要一个由makeVector()
返回的参数,以便从存储在makeVector()
对象环境中的缓存值中检索平均值
list(set = set, get = get,
setmean = setmean,
getmean = getmean)
makeVector()中发生了什么?
makeVector()
中需要理解的关键概念是,它构建一组函数,并将列表中的函数返回给父环境。就是
myVector <- makeVector(1:15)
请注意,x
被初始化为函数参数,因此在函数中不需要进一步初始化m
设置为NULL,将其初始化为makeVector()环境中的对象,供函数中的后续代码使用
此外,函数声明的形式部分将默认值x
定义为空数值向量。使用默认值初始化向量非常重要,因为如果没有默认值,data,我无法理解为什么在第一部分正常工作时会出现这种情况:cachemean中的错误(m):对象“m”未找到后续问题:。
makeVector(x = numeric()) {
m <- NULL
...
}
Error in x$get() : argument "x" is missing, with no default
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)
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
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
aVector <- makeVector(1:10)
aVector$get() # retrieve the value of x
aVector$getmean() # retrieve the value of m, which should be NULL
aVector$set(30:50) # reset value with a new vector
cachemean(aVector) # notice mean calculated is mean of 30:50, not 1:10
aVector$getmean() # retrieve it directly, now that it has been cached
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)
}
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(makeVector(1:100))
cachemean(makeVector(1:100))
Error in x$get() : argument "x" is missing, with no default