【问题标题】:How can Iist only functions and those that come from a packageIist 怎么能只有函数和那些来自包的函数
【发布时间】: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


【解决方案1】:

来自cmets:

as.list(.GlobalEnv)[sapply(.GlobalEnv, is.function)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多