我有一个R脚本,可以在终端中执行Rscript app/myapp.R
。R 脚本存储在 R 包项目中,以便我可以从文档、检查和单元测试工具中受益。
只是为了用户友好,我想知道是否有一种方法可以模仿 python 在模块内__main__.py
的行为。
编辑 6/1/2020 :我实际上需要其他用户(未归为 R(使用该脚本。因此,一旦安装了软件包,找到脚本的完整路径对他们来说并不是一个真正的选择。
在python项目中,当我有以下包结构时:
mypackage
├── mymodule
│ ├── __init__.py
│ └── __main__.py
└── setup.py
我可以从终端中的任何文件夹中执行python -m mymodule
,前提是该软件包确实已安装在我的python库中。该命令将执行mypackage/mymodule/__main__.py
。
我希望对 R 包具有相同的行为。假设 R 包mypackage
已安装在我的 R 用户的库中。我希望能够从终端中的任何位置运行mypackage/app/myapp.R
(实际上,我希望其他人能够安装软件包并运行应用程序而无需克隆存储库(。
我知道我能做到
Rscript app/myapp.R
但这只有在我cd
path/to/mypackage
时才有效.我希望能够在终端的任何地方做如下的事情,前提是该软件包安装在 R 用户的库中。
Rscript -m myapp
demo()
似乎是为交互式会话制作的,我需要一个非交互式会话。
事实证明,有一个非常简单的解决方案使用R
命令而不是Rscript
。只需将脚本包装在包中的函数中,然后使用:
R -e "mypackage::myfunc()"