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)
}
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
}

我尝试在 R 中运行此代码,但出现错误 $ 运算符对原子向量无效,这是可以理解的,因为 x 没有递归。 但从代码中可以明显看出,我需要处理缓存的值。 据我所知,第一个功能工作正常。 还有其他方法可以从第一个函数(替代 $ 运算符(获取缓存值吗? 附上第一个函数输出和第二个函数错误的屏幕截图

输出:

makeVector(c(2,4,6,8))
$set
function(y) {
x <<- y
m <<- NULL
}
<environment: 0x0000019d4335e130>
$get
function() x
<environment: 0x0000019d4335e130>
$setmean
function(mean) m <<- mean
<environment: 0x0000019d4335e130>
$getmean
function() m
<environment: 0x0000019d4335e130>
> cachemean(c(2,4,6,8))
Error in x$getmean : $ operator is invalid for atomic vectors

在你的指令中,你传递x作为原子向量。这就是为什么$ 不起作用的原因。像这样使用它:cachemean(makeVector(1:6)),你会得到一个结果。

但是,它不会被缓存,因为此代码会创建一个会丢失的临时变量。你需要一个地方来存储它。看看这个:

test <- makeVector(c(2,4,6,8))
test$getmean()
# returns NULL because R discards the object when the function has finished
cachemean(test)
test$getmean()
# returns 5

最新更新