我很高兴发现 Jeff 和 Dirk 的应用程序更小,可以从终端运行 R 函数。¡ 赞!
从那时起,我已经能够将我的功能传递给我的开发团队并让它们在其他服务器上运行。
我的问题是关于它的部署。在将它传递给其他人之前,我会在我的计算机上试用它并使用 RStudio 准备它......(也是荣誉)。
我想知道脚本中是否有要运行的命令,我可以在该命令上判断该函数是从命令运行还是使用 R 执行。
谢谢。
不知道有没有更具体的答案。但总的来说,在 R 中不可能(或非常难)确定代码是如何运行的,这是我在modules上工作的动机之一。
R 唯一知道的是代码是否在交互式 shell 中运行(通过interactive()
)。
使用模块,您可以测试是否module_name()
已设置,类似于 Python 的__name__
:
if (is.null(module_name()) && ! interactive()) {
# Stand-alone, execute main entry point
}
if (! is.null(module_name())) {
# Code is being loaded as a module.
}
我已经基于此编写了一个小型包装器,我用它来编写我的命令行应用程序。例如,一个非常简单cat
的类应用程序如下所示:
#!/usr/bin/env Rscript
sys = modules::import('sys')
sys$run({
if (length(sys$args) == 0) {
message('Usage: ', script_name(), ' filename')
sys$exit(1)
}
input = sys$args[1]
cat(readLines(input))
})
我不确定我是否理解你的问题。你的意思是像
edd@max:~$ which r
/usr/local/bin/r
edd@max:~$
您可以将结果which
与空字符串进行比较,因为当您请求一个不存在的程序时没有任何返回。
edd@max:~$ which s # we know we don't have this
edd@max:~$
然后,您可以使用 的结果which r
来检查版本:
edd@max:~$ `which r` --version
r ('littler') version 0.2.2
git revision 8df31e5 as of Thu Jan 29 17:43:21 2015 -0800
built at 19:48:17 on Jan 29 2015
using GNU R Version 3.1.2 (2014-10-31)
Copyright (C) 2006 - 2014 Jeffrey Horner and Dirk Eddelbuettel
r is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License. For more information about
these matters, see http://www.gnu.org/copyleft/gpl.html.
edd@max:~$
编辑:当您似乎对interactive()
真假感到困惑时,请考虑r --help
:
edd@max:~$ r --help
Usage: r [options] [-|file]
Launch GNU R to execute the R commands supplied in the specified file, or
from stdin if '-' is used. Suitable for so-called shebang '#!/'-line scripts.
Options:
-h, --help Give this help list
--usage Give a short usage message
-V, --version Show the version number
-v, --vanilla Pass the '--vanilla' option to R
-t, --rtemp Use per-session temporary directory as R does
-i, --interactive Let interactive() return 'true' rather than 'false'
-q, --quick Skip autoload / delayed assign of default libraries
-p, --verbose Print the value of expressions to the console
-l, --packages list Load the R packages from the comma-separated 'list'
-d, --datastdin Prepend command to load 'X' as csv from stdin
-e, --eval expr Let R evaluate 'expr'
edd@max:~$
和
edd@max:~$ r -e'print(interactive())'
[1] FALSE
edd@max:~$ r -i -e'print(interactive())'
[1] TRUE
edd@max:~$
但这是设置它而不是查询它。