我正在尝试在R中的一个包中实现延迟评估。我想了解它是如何工作的。我有一种情况,我不想评估所有输出,而是创建一个函数,以便在必要时获取。例如,当我使用lm
函数拟合线性模型时,我并不想要使用lm
对象获取拟合值,而是使用其他函数对其进行评估。我按照以下方式设置了我的情况,
my_fun <- function(a, b, c){
ret <- list(asq = a^2, bc = substitute(b * c))
class(ret) <- "my_class"
return(ret)
}
get_prod <- function(obj) {
if(!class(obj) == "my_class") stop("unknow class")
return(eval(obj$bc))
}
my_obj <- my_fun(1, 3, 4)
get_prod(my_obj)
我想知道,这是否是一个好的做法,这将使我的评估在内存和CPU消耗方面更快。