0

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>

したがって、パッケージの名前空間をデフォルトの名前空間にインポートして、関数内のコードを確認できる (そしてデバッグを容易にする) 方法があるかどうか疑問に思っていました。私は名前空間について読んできましたが、ほとんどの場合、開発者向けに書かれているため、パッケージの名前空間をエクスポートする方法について話しています。

4

2 に答える 2

0

これは非常に大まかな代替手段ですが、要求されたとおりに動作します。

まず、名前空間の内容をグローバル環境のリストにコピーします。

L <- as.list(asNamespace("yourpackage"))

Lこれで、グローバル環境内の同じ名前のオブジェクトにすべてのコンテンツをナビゲートまたはコピーできます。

invisible(lapply(names(L), function(x) eval(parse(text=paste0(x,"<-L[['",x,"']]")), globalenv())))

警告: これにより、同じ名前で定義したオブジェクトが上書きされます! したがって、注意して使用してください。

于 2013-04-03T21:28:43.567 に答える