gpt4 book ai didi

R: 在传递时找不到 "function"... lapply?

转载 作者:行者123 更新时间:2023-12-01 12:43:56 25 4
gpt4 key购买 nike

我想实现另一个版本的 lapply 函数,它允许我指定是否并行运行。代码是这样的:

papply <- function(x,fun,...,
parallel=FALSE,parallel.options=list(mode="socket",cpus=2),
integrate=rbind,convert=NULL) {
if(parallel) {
require(parallelMap)
do.call(parallelStart,parallel.options)
result <- parallelLapply(x,fun,...)
parallelStop()
} else {
result <- lapply(x,fun,...)
}
if(is.function(integrate)) {
result <- do.call(integrate,result)
}
if(is.function(convert)) {
result <- convert(result)
}
return(result)
}

如果parallel=TRUE,我使用{parallelMap}包中的parallelLapply(),否则我使用普通的lapply功能。在这两种方法中,我尝试映射的向量/列表是 x 并且映射函数是 fun。由于 fun 可能有多个参数,我使用 ... 将额外的参数传递给 fun

但是,如果没有指定额外的参数,比如

papply(1:5,function(i,x){return(data.frame(a=i,b=i+1))})

它工作正常并返回正确的值:

  a b
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

但是如果指定了额外的参数,比如

papply(1:5,function(i,x){return(data.frame(a=i,b=i+x))},x=1)

它没有成功,但报告了这样的错误

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
object 'fun' of mode 'function' was not found
4 get(as.character(FUN), mode = "function", envir = envir)
3 match.fun(FUN)
2 lapply(x, fun, ... = ...) at utils.R#37
1 papply(1:5, function(i, x) {
return(data.frame(a = i, b = i + x))
}, x = 1)

我不知道为什么会出现这个错误。如何解决错误并使功能正常工作?

最佳答案

这归结为位置匹配和参数命名问题。

xpapply 的形式参数,因此,当您将其命名为

papply(1:5, function(i, x) {return(data.frame(a=i, b=i+x))}, x=1)

这意味着 1:5 匹配为 fun --> 因此出现错误。

在您的函数的当前形式中,R 不可能知道当您表示 x=1 时您希望在 ... 组件中考虑这一点。

请将 MoreArgs 参数视为 mapply 的一种可能有用的方法。

关于R: 在传递时找不到 "function"... lapply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com