【问题标题】:Is it possible to list all the global options that can be set for a package?是否可以列出可以为包设置的所有全局选项?
【发布时间】:2017-09-04 00:14:05
【问题描述】:

tibble 的小插图中,我了解到可以通过options 对全局选项进行一些更改,以控制打印的外观。但是,我在 R 中找不到此选项的任何手册。我什至不知道可以将哪些字段添加到包的全局选项中。所以问题是:

对于一个包,我们能否获得一个字段列表(如tibble.print_maxtibble.print_min 用于tibbleBioC_mirror 用于utils)可以通过options 在R 中设置,然后才知道它们?

【问题讨论】:

    标签: r package options


    【解决方案1】:

    鉴于缺乏关于如何处理外部(甚至是内部,据我所知)包中的选项的必要实践(例如,在 CRAN 上),也许最通用的方法是这样的:

    1. CRAN mirror on GitHub 上查找包。例如,这里是tibble

    2. 在存储库中搜索“option”以找到all references to "option" in the package's code

    3. 通过此搜索。知道要寻找什么需要一点敏锐的眼光,但这就是我了解到tibble 的所有选项都列在主包帮助页面(?"tibble-package")上的原因,因为我找到了these lines与搜索。

    如果您将 repo 克隆到您的机器并使用命令行工具,例如,第 3 步可以更好地自动化

    cd package_dir
    grep option R/*
    

    (这与上面的非常相似,但启用了grep 的全部灵活性)

    为了进一步确认,这种方法让我找到了data.tablextable 的正确位置。

    【讨论】:

      【解决方案2】:

      可设置选项的处理方式由包作者自行决定(是否将它们包含在.Options 中,是否将它们隐藏等)。看起来 tibble 包有一个隐藏变量 op.tibble,它显示了可用的选项。

      tibble:::op.tibble
      # $tibble.print_max
      # [1] 20
      # 
      # $tibble.print_min
      # [1] 10
      #
      # $tibble.width
      # NULL
      #
      # $tibble.max_extra_cols
      # [1] 100
      

      因此,以下将为您提供包中可用选项的名称。

      names(tibble:::op.tibble)
      # [1] "tibble.print_max"      "tibble.print_min"     
      # [3] "tibble.width"          "tibble.max_extra_cols"
      

      作为说明,我通过这样做找到了op.tibble

      grep("op", ls(getNamespace("tibble"), all=TRUE), value=TRUE)
      # [1] "op.tibble"  "stopc"      "tibble_opt"
      

      然后逐个查看这些项目。也许其他作者可能会做类似的事情。但是在包中定义选项没有通用规则。

      【讨论】:

      • ?"tibble-package" 也列出了这些。但更普遍的问题是“给定一些随机包foo,我怎么知道它有哪个options”——我不知道有一个一致的答案。
      • @MichaelChirico - 不,不是因为包作者可以使用选项做任何他们想做的事情。
      • 对,这似乎不是最佳实践...在探索新软件包的功能时了解它似乎很有用...我们知道在哪里可以找到所有手册页,但如果它们不容易找到,选项可能会变得尘土飞扬
      • 了解这些选项在某些情况下会有所帮助。但似乎没有通用的方法来做到这一点。
      猜你喜欢
      • 2018-12-27
      • 2012-09-11
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多