【问题标题】:R / Sweave argumentsR / Sweave 参数
【发布时间】:2012-03-13 01:20:49
【问题描述】:

我正在使用 R 和 Sweave 生成​​报告。

R CMD Sweave MyReport.Rnw

我希望能够向 R 代码发送参数,因为报告当然是“动态”。所以,我希望能够执行以下操作:

R CMD SWeave MyReport.Rnw PatientId=5

...让 R 代码读取变量中的 PatientId 值...

我该怎么做?有人提到使用环境变量,但这似乎是一个不优雅的解决方案。

【问题讨论】:

    标签: r arguments sweave


    【解决方案1】:

    要获取从 R 命令行传递的参数,您可以使用函数 commandArgs(),但不幸的是 R CMD Sweave 不支持额外的命令行选项。但是,您仍然可以通过R -e 致电 Sweave,例如

    R -e "Sweave('MyReport.Rnw')" --args PatientId=1
    

    MyReport.Rnw 中,您对commandArgs(TRUE) 进行一些文本处理,在这种情况下会为您提供字符串PatientId=1

    但我认为更好的做法是在 R 脚本中直接使用函数Sweave();例如在这种情况下,您可以在

    之类的脚本中编写流程
    PatientId <- 1
    Sweave("MyReport.Rnw")
    

    MyReport.Rnw 中,您直接使用全局变量PatientId。如果你想生成一系列报告,你甚至可以使用PatientId的循环。

    【讨论】:

      【解决方案2】:

      您需要“写入”可以“读取”的值:

      • 如上所述,环境变量是sys.getenv() 的一种简单方法

      • 您可以读取的配置或数据文件

      • 数据库存储

      etc pp. 回想一下,R 代码确实是执行,所以你总是可以分两步进行:

      rScriptOne.r                   # write to foo.txt
      R CMD Sweave MyReport.Rnw      # reads from foo.txt
      

      【讨论】:

      • 我经常不喜欢使用环境变量,我认为这在可重复性研究中不是一个好习惯,因为环境变量通常特定于一个单一的系统。
      • 它们也不是我最喜欢的,但 R 例如在幕后使用它们一公吨,并且在不同的平台和系统上成功地这样做了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多