gpt4 book ai didi

r - 将包命名空间导入默认命名空间

转载 作者:行者123 更新时间:2023-12-04 17:00:34 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How can I read the source code for an R function?

(1 个回答)


8 年前关闭。




通常,当我使用 R 并且想了解该函数的作用时,我会输入该函数的名称并滚动浏览代码。但是,有时当我输入函数名称时,我得到的响应并没有告诉我任何信息。

> library(limma)
> plotMDS #can't get to the code
function (x, ...)
UseMethod("plotMDS")
<environment: namespace:limma>
> limma:::plotMDS
function (x, ...)
UseMethod("plotMDS")
<environment: namespace:limma>
> heatmap #im expecting something more like this
function (x, Rowv = NULL, Colv = if (symm) "Rowv" else NULL,
distfun = dist, hclustfun = hclust, reorderfun = function(d,
w) reorder(d, w), add.expr, symm = FALSE, revC = identical(Colv,
"Rowv"), scale = c("row", "column", "none"), na.rm = TRUE,
margins = c(5, 5), ColSideColors, RowSideColors, cexRow = 0.2 +
1/log10(nr), cexCol = 0.2 + 1/log10(nc), labRow = NULL,
labCol = NULL, main = NULL, xlab = NULL, ylab = NULL, keep.dendro = FALSE,
verbose = getOption("verbose"), ...)
{
scale <- if (symm && missing(scale))
"none"
else match.arg(scale)
/* ... many lines removed ... */
}
invisible(list(rowInd = rowInd, colInd = colInd, Rowv = if (keep.dendro &&
doRdend) ddr, Colv = if (keep.dendro && doCdend) ddc))
}
<bytecode: 0x16199b8>
<environment: namespace:stats>

因此,我想知道是否有办法将包的命名空间导入默认命名空间,以便我可以查看函数中的代码(并更轻松地调试)。我一直在阅读命名空间,但大部分时间它是为开发人员编写的,所以它讨论的是如何为包导出命名空间。

最佳答案

plotMDS是泛型函数。您通过 plotMDS 访问的内容和 limma:::plotMDS完全一样,后者只是效率较低。您想得到的是方法 对于这个通用功能。

查看 plotMDS 的方法列表尝试

methods(plotMDS)

这将返回一个函数名称向量。我无法安装 利马所以这是我们看到的基础 plot通用 [在我​​当前的 session 中]:
> methods(plot)
[1] plot.acf* plot.correspondence* plot.data.frame*
[4] plot.decomposed.ts* plot.default plot.dendrogram*
[7] plot.density plot.ecdf plot.factor*
[10] plot.formula* plot.function plot.hclust*
[13] plot.histogram* plot.HoltWinters* plot.isoreg*
[16] plot.lda* plot.lm plot.mca*
[19] plot.medpolish* plot.mlm plot.ppr*
[22] plot.prcomp* plot.princomp* plot.profile*
[25] plot.profile.nls* plot.ridgelm* plot.spec
[28] plot.stepfun plot.stl* plot.table*
[31] plot.ts plot.tskernel* plot.TukeyHSD

Non-visible functions are asterisked

要访问未加星标的函数的代码,我们只需输入完整的函数名称,例如
> plot.density
function (x, main = NULL, xlab = NULL, ylab = "Density", type = "l",
zero.line = TRUE, ...)
{
....

要查看带星号的函数/方法的代码,您需要 pkg:::function结构,例如为 plot.data.frame方法
> plot.data.frame
Error: object 'plot.data.frame' not found
> graphics:::plot.data.frame
function (x, ...)
{
....

如果你不知道一个方法属于哪个命名空间,那么使用 getAnywhere ,例如
> getAnywhere(plot.data.frame)
A single object matching ‘plot.data.frame’ was found
It was found in the following places
registered S3 method for plot from namespace graphics
namespace:graphics
with value

function (x, ...)
{
....

打印的结果表明相关的命名空间(在本例中为 graphics )加上函数的返回值或代码。

关于r - 将包命名空间导入默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798154/

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