为了账号安全,请及时绑定邮箱和手机立即绑定

如何查看函数的源代码?

如何查看函数的源代码?

万千封印 2019-05-27 10:27:59
如何查看函数的源代码?我想查看一个函数的源代码,看看它是如何工作的。我知道我可以通过在提示符下键入其名称来打印函数:> tfunction (x) UseMethod("t")<bytecode: 0x2332948><environment: namespace:base>在这种情况下,是什么UseMethod("t")意思?我如何找到实际使用的源代码,例如:t(1:10)?有没有当我看到之间的差异UseMethod,当我看到standardGeneric和showMethods,与with?> withstandardGeneric for "with" defined from package "base"function (data, expr, ...) standardGeneric("with")<bytecode: 0x102fb3fc0><environment: 0x102fab988>Methods may be defined for arguments: dataUse  showMethods("with")  for currently available ones.在其他情况下,我可以看到正在调用R函数,但我找不到这些函数的源代码。> ts.unionfunction (..., dframe = FALSE) .cbind.ts(list(...), .makeNamesTs(...), dframe = dframe, union = TRUE)<bytecode: 0x36fbf88><environment: namespace:stats>> .cbindtsError: object '.cbindts' not found> .makeNamesTsError: object '.makeNamesTs' not found我如何找到.cbindts和.makeNamesTs?一样的功能?在其他情况下,有一些R代码,但大多数工作似乎在其他地方完成。> matrixfunction (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>> .Internalfunction (call)  .Primitive(".Internal")> .Primitivefunction (name)  .Primitive(".Primitive")我如何找出该.Primitive功能的作用?同样,一些函数调用.C,.Call,.Fortran,.External,或.Internal。如何找到这些的源代码
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

使用debug()函数进行调试时会显示它。假设您想在t()转置函数中查看底层代码。只需输入't',就不会显示太多。

>t 
function (x) UseMethod("t")<bytecode: 0x000000003085c010><environment: namespace:base>

但是,使用'debug(functionName)',它揭示了底层代码,没有内部。

> debug(t)> t(co2)debugging in: t(co2)debug: UseMethod("t")Browse[2]> debugging in: t.ts(co2)debug: {
    cl <- oldClass(x)
    other <- !(cl %in% c("ts", "mts"))
    class(x) <- if (any(other)) 
        cl[other]
    attr(x, "tsp") <- NULL
    t(x)}Browse[3]> debug: cl <- oldClass(x)Browse[3]> debug: other <- !(cl %in% c("ts", "mts"))Browse[3]> debug: class(x) 
    <- if (any(other)) cl[other]Browse[3]>  debug: attr(x, "tsp") <- NULLBrowse[3]> debug: t(x)

编辑: debugonce()完成相同,而不必使用undebug()


查看完整回答
反对 回复 2019-05-27
  • 3 回答
  • 0 关注
  • 1477 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信