【问题标题】:How to view the contents of parsed R functions?如何查看已解析的 R 函数的内容?
【发布时间】:2010-12-06 08:00:33
【问题描述】:

R 是a functional programming language,它的主要优点之一是它能够创建开放和透明的函数。

正如约翰钱伯斯所说in his excellent book "Software for Data Analysis: Programming with R"

计算是围绕函数组织的,这些函数可以封装特定的、有意义的计算结果,以及可以检查其正确性的实现。

“可重复的研究”和“可信赖的软件”等概念是 R 开发的核​​心。通常,只需键入不带括号的名称即可轻松检查函数。例如:

> which
function (x, arr.ind = FALSE) 
{
    if (!is.logical(x)) 
        stop("argument to 'which' is not logical")
    wh <- seq_along(x)[x & !is.na(x)]
    dl <- dim(x)
...

我的问题是:如何在不下载R源代码的情况下实例化for()if()等函数的内容?

编辑:顺便说一句,我知道这无助于查看可能从 R 调用的编译代码(例如 C、C++ 或 Java)。我真的想知道是否有一个输出 R 函数的 R 函数。

【问题讨论】:

  • But but but...forif 是 R 语法的一部分,所以你不能只检查它们;它们是内置的。
  • (即它们本身不是函数,尽管视觉上相似。)
  • 我明白了!它们不是函数。这就解释了。它们更像函数“函数”或其他符号,例如
  • 但是您不能接受对错误问题的正确答案 :-) 您仍然希望来源看到解析器,您也可以在其中找到它。
  • :-) 我完全同意您对《钱伯斯》一书的评论。 《数据分析软件》强烈推荐阅读。

标签: r functional-programming


【解决方案1】:

俗话说:使用源,卢克!

R 函数可能在提示符下可见,但仍会被解析,这意味着 cmets 已被剥离,代码缩进已更改等。所以我总是会去源代码。

【讨论】:

    【解决方案2】:

    出于与 Dirk 提到的相同原因,我也喜欢去源头,但为了快速而肮脏的工作,我还依赖以下子集:

    getAnywhere(), getFromNameSpace(), THEPACKAGE:::thefn, getGeneric()

    查看未被其包的命名空间导出的函数。

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 2021-11-26
      • 1970-01-01
      • 2011-01-13
      • 2013-04-08
      • 2020-05-09
      • 2012-02-29
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多