我有一个不应该返回任何输出的绘图函数f
。
f <- function(a=0) invisible(NULL)
f(10)
向量化f
后,它会返回NULL
。
f_vec <- Vectorize(f)
f_vec(10)
[[1]]
NULL
如何防止这种情况,即在此输出也不可见。 我当然可以使用包装器来抑制它。
f_wrapper <- function(a=0) {
dummy <- f_vec(a)
}
f_wrapper(10)
有没有办法避免包装并立即得到我想要的东西?
答案 0 :(得分:4)
Vectorize
会执行此操作:
Vectorize_2 <- function (FUN, vectorize.args = arg.names, SIMPLIFY = TRUE, USE.NAMES = TRUE) {
arg.names <- as.list(formals(FUN))
arg.names[["..."]] <- NULL
arg.names <- names(arg.names)
vectorize.args <- as.character(vectorize.args)
if (!length(vectorize.args))
return(FUN)
if (!all(vectorize.args %in% arg.names))
stop("must specify names of formal arguments for 'vectorize'")
FUNV <- function() {
args <- lapply(as.list(match.call())[-1L], eval, parent.frame())
names <- if (is.null(names(args)))
character(length(args))
else names(args)
dovec <- names %in% vectorize.args
invisible(do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs = list(args[!dovec]),
SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES)))
}
formals(FUNV) <- formals(FUN)
FUNV
}
但是,我怎么知道这样做的?我花了20分钟写了Vectorize
的全新版本吗?不!我刚刚运行dput(Vectorize)
以查看R
后面的Vectorize
代码,并在必要时添加了invisible
!您可以使用所有R
函数执行此操作。你甚至不需要dput
!只需运行Vectorize
!