R 包中的递归S3调用 我想要完成的
我有一个R包,其中包含一些内部R函数(在下面的示例中称为f和g),它们以递归方式使用。在最小的示例中,函数只返回参数的长度,但在实际代码中,它们会触发更复杂的计算 我想做的是:R 包中的递归S3调用 我想要完成的,r,recursion,r-package,r-s3,R,Recursion,R Package,R S3,我有一个R包,其中包含一些内部R函数(在下面的示例中称为f和g),它们以递归方式使用。在最小的示例中,函数只返回参数的长度,但在实际代码中,它们会触发更复杂的计算 我想做的是: 如果用户将一个对象传递给函数g,R应该查找是否有一个可以调用该对象的S3方法 如果对象是列表,则函数g应应用于列表中的每个对象。如果我们还没有达到最大递归深度,请转到1。如果达到最大递归级别,则停止 显示问题的代码 将以下代码放入包中非常重要。只有当代码是包的一部分时,我得到的错误才是可复制的。 utils.R g &l
utils.R
g <- function(x, depth = 0) {
stopifnot(depth <= 1)
UseMethod("g")
}
g.numeric <- function(x, depth = 0) {
length(x)
}
g.integer <- function(x, depth = 0) {
length(x)
}
g.double <- function(x, depth = 0) {
length(x)
}
g.list <- function(x, depth = 0) {
sum(sapply(x, g, depth = depth + 1))
}
我所期望的
错误
结果应为6
x <- c(1.0, 1.3, 1.5)
core_fun(list(x,x))
通行证
结果应该是3
x <- c(1.0, 1.3, 1.5)
core_fun(x)
x我认为这与?lappy
中的注释有关。如果您像他们建议的那样使用包装器运行它,那么分派就正确完成了
g.list
Error in UseMethod("g") :
no applicable method for 'g' applied to an object of class "c('double','numeric')"
x <- c(1.0, 1.3, 1.5)
core_fun(x)