【发布时间】:2023-03-07 05:26:01
【问题描述】:
我使用foreach 包来并行化一些东西,我厌倦了每次需要使用它时都在.export 中指示5 个函数。
我知道我可以做到foreach(...,.export=ls(.GlobalEnv)),但这会将大量数据传输给工作人员并减慢我的速度(可能定义了大表)。
所以问题是我怎样才能只列出.GlobalEnv 中的函数
我做到了:
getAllFunctions <- function(envir=.GlobalEnv){
allClasses <- sapply(grep(x=ls(envir), pattern='^%', value=TRUE, invert=TRUE), FUN=function(x){class(eval(parse(text=x)))})
fnNames <- names(allClasses)[allClasses == 'function']
return(fnNames)
}
但这很丑(并且给出了一切),我确信有一种惯用的方式
【问题讨论】:
-
我猜你可以从
ls.str(mode = "function", envir = .GlobalEnv)开始 -
或者用
as.list(.GlobalEnv)[sapply(.GlobalEnv, is.function)]实际返回你的函数 -
@user20650:是的,更好,我会以此为答案
-
或者你可以将大卫的答案包装在
mget中,我认为这样更好/更清晰 -
或者可能是
Filter(is.function, as.list(.GlobalEnv))
标签: r parallel-foreach