如何查看函数的源代码?

如何查看函数的源代码?

我想查看一个函数的源代码,看看它是如何工作的。我知道我可以通过在提示符下键入其名称来打印函数:


> t

function (x) 

UseMethod("t")

<bytecode: 0x2332948>

<environment: namespace:base>

在这种情况下,是什么UseMethod("t")意思?我如何找到实际使用的源代码,例如:t(1:10)?


有没有当我看到之间的差异UseMethod,当我看到standardGeneric和showMethods,与with?


> with

standardGeneric for "with" defined from package "base"


function (data, expr, ...) 

standardGeneric("with")

<bytecode: 0x102fb3fc0>

<environment: 0x102fab988>

Methods may be defined for arguments: data

Use  showMethods("with")  for currently available ones.

在其他情况下,我可以看到正在调用R函数,但我找不到这些函数的源代码。


> ts.union

function (..., dframe = FALSE) 

.cbind.ts(list(...), .makeNamesTs(...), dframe = dframe, union = TRUE)

<bytecode: 0x36fbf88>

<environment: namespace:stats>

> .cbindts

Error: object '.cbindts' not found

> .makeNamesTs

Error: object '.makeNamesTs' not found

我如何找到.cbindts和.makeNamesTs?一样的功能?


在其他情况下,有一些R代码,但大多数工作似乎在其他地方完成。


> matrix

function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) 

{

    if (is.object(data) || !is.atomic(data)) 

        data <- as.vector(data)

    .Internal(matrix(data, nrow, ncol, byrow, dimnames, missing(nrow), 

        missing(ncol)))

}

<bytecode: 0x134bd10>

<environment: namespace:base>

> .Internal

function (call)  .Primitive(".Internal")

> .Primitive

function (name)  .Primitive(".Primitive")

我如何找出该.Primitive功能的作用?同样,一些函数调用.C,.Call,.Fortran,.External,或.Internal。如何找到这些的源代码


万千封印
浏览 1478回答 3
3回答

神不在的星期二

使用debug()函数进行调试时会显示它。假设您想在t()转置函数中查看底层代码。只需输入't',就不会显示太多。>t&nbsp; function&nbsp;(x)&nbsp;UseMethod("t")<bytecode:&nbsp;0x000000003085c010><environment:&nbsp;namespace:base>但是,使用'debug(functionName)',它揭示了底层代码,没有内部。>&nbsp;debug(t)>&nbsp;t(co2)debugging&nbsp;in:&nbsp;t(co2)debug:&nbsp;UseMethod("t")Browse[2]>&nbsp;debugging&nbsp;in:&nbsp;t.ts(co2)debug:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;cl&nbsp;<-&nbsp;oldClass(x) &nbsp;&nbsp;&nbsp;&nbsp;other&nbsp;<-&nbsp;!(cl&nbsp;%in%&nbsp;c("ts",&nbsp;"mts")) &nbsp;&nbsp;&nbsp;&nbsp;class(x)&nbsp;<-&nbsp;if&nbsp;(any(other))&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cl[other] &nbsp;&nbsp;&nbsp;&nbsp;attr(x,&nbsp;"tsp")&nbsp;<-&nbsp;NULL &nbsp;&nbsp;&nbsp;&nbsp;t(x)}Browse[3]>&nbsp;debug:&nbsp;cl&nbsp;<-&nbsp;oldClass(x)Browse[3]>&nbsp;debug:&nbsp;other&nbsp;<-&nbsp;!(cl&nbsp;%in%&nbsp;c("ts",&nbsp;"mts"))Browse[3]>&nbsp;debug:&nbsp;class(x)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<-&nbsp;if&nbsp;(any(other))&nbsp;cl[other]Browse[3]>&nbsp;&nbsp;debug:&nbsp;attr(x,&nbsp;"tsp")&nbsp;<-&nbsp;NULLBrowse[3]>&nbsp;debug:&nbsp;t(x)编辑:&nbsp;debugonce()完成相同,而不必使用undebug()
打开App,查看更多内容
随时随地看视频慕课网APP