2

Jeff と Dirk のアプリケーションでは、端末から R 関数を実行することがほとんどできないことに非常に興奮しています。称賛!
それ以来、自分の機能を開発チームに渡し、他のサーバーで実行できるようになりました。

私の質問は、その展開についてです。他の人に渡す前に、自分のコンピューターで試して、RStudio で準備します... (これも称賛)。
関数がコマンドから実行されているか、Rで実行されているかを確認できるスクリプトで実行するコマンドがあるかどうか疑問に思っていました.

ありがとう。

4

2 に答える 2

3

I don’t know whether there’s a littler specific answer. But in general it is impossible (or very hard) in R to determine how the code is run, which was one of the motivations for my work on modules.

The only thing R knows is whether the code is being run in an interactive shell (via interactive()).

With modules, you can test whether module_name() is set, analogous to Python’s __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.
}

I’ve written a small wrapper based on this which I’m using to write my command line applications. For instance, a very simple cat-like application would look as follows:

#!/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))
})
于 2015-02-18T17:02:32.520 に答える
2

あなたの質問を理解しているかどうかわかりません。みたいな意味ですか?

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:~$ 

しかし、それはクエリではなく設定です。

于 2015-02-18T17:00:31.490 に答える