【发布时间】:2021-09-24 23:48:12
【问题描述】:
我正在使用 R。我在 stackoverflow 上找到了这篇上一篇文章,其中展示了如何获取属于给定库的所有函数的“列表”:
How to find all functions in an R package?
例如:
#load desired library
library(ParBayesianOptimization)
#find out all functions from this library
getNamespaceExports("ParBayesianOptimization")
[1] "addIterations" "getLocalOptimums" "bayesOpt" "getBestPars" "changeSaveFile" "updateGP"
上面的代码告诉我“ParBayesianOptimization”库中使用的所有函数的名称。从这里,我可以手动检查这些功能中的每一个 - 例如:
# manually inspect any one of these functions
getAnywhere(bayesOpt)
A single object matching ‘bayesOpt’ was found
It was found in the following places
package:ParBayesianOptimization
namespace:ParBayesianOptimization
with value
#function stats here
function (FUN, bounds, saveFile = NULL, initGrid, initPoints = 4,
iters.n = 3, iters.k = 1, otherHalting = list(timeLimit = Inf,
minUtility = 0), acq = "ucb", kappa = 2.576, eps = 0,
parallel = FALSE, gsPoints = pmax(100, length(bounds)^3),
convThresh = 1e+08, acqThresh = 1, errorHandling = "stop",
plotProgress = FALSE, verbose = 1, ...)
{
startT <- Sys.time()
optObj <- list()
etc etc etc ...
saveFile = saveFile, verbose = verbose, ...)
return(optObj)
}
#function ends here
<bytecode: 0x000001cbb4145db0>
<environment: namespace:ParBayesianOptimization>
目标:是否可以使用这些函数中的每一个并创建一个包含完整定义的记事本文件?
看起来像这样的东西:
我的尝试:
我想我可以先在 R 中创建一个“对象”,其中包含该库中的所有函数:
library(plyr)
a = getNamespaceExports("ParBayesianOptimization")
my_list = do.call("rbind.fill", lapply(a, as.data.frame))
X[[i]]
1 addIterations
2 getLocalOptimums
3 bayesOpt
4 getBestPars
5 changeSaveFile
6 updateGP
然后,我可以手动创建一个“分配箭头”:
header_text <- rep("<-")
然后,将其“粘贴”到每个函数名称:
combined_list <- as.character(paste(my_list, header_text, sep = ""))
但这看起来不正确:
combined_list
[1] "c(\"addIterations\", \"getLocalOptimums\", \"bayesOpt\", \"getBestPars\", \"changeSaveFile\", \"updateGP\")<- "
目标是自动化手动复制/粘贴的过程:
function_1 = getAnywhere("first function ParBayesianOptimization library")
function_2 = getAnywhere("second function ParBayesianOptimization library")
etc
final_list = c(function_1, function_2 ...)
并从每个函数中删除通用描述:
A single object matching ‘bayesOpt’ was found
It was found in the following places
package:ParBayesianOptimization
namespace:ParBayesianOptimization
with value
最后,如果我要“调用”final_list 对象,则该库中的所有函数都应该重新创建和重新分配。
有人可以告诉我如何做到这一点吗? 谢谢
【问题讨论】:
-
看看
dump()函数。如果您将函数名称作为列表传递,它可以导出函数的代码。但看起来您只是在查看导出的函数,并且某些函数可能会调用未导出的函数,如果您尝试使用这些函数,这些函数会中断。如果您打开 tar.gz 包文件,您可以在“R”文件夹中获取所有 R 函数的所有源代码。我不清楚您通过重新定义所有功能到底想完成什么。 -
感谢您的回复!我只是想获得具有特定库的每个函数的函数定义。我知道如果你调用它们,可能会有未导出的函数可能会中断 - 但作为一个学习短途旅行,我很想看看是否有一种自动方法来获取库中每个函数的代码(例如,请看截图我上传了)。非常感谢您的帮助!
标签: r list function concatenation variable-assignment