1

いくつかのコマンドをバッチ モードで実行する必要があります (例: Rscript 経由)。これらはインタラクティブ モードで動作しますが、バッチ モードでは動作しません。最小限の例を次に示しますsapply(1:3, is, "numeric")。インタラクティブ モードでは機能するのに、バッチ モードではエラーが返されるのはなぜですか? このようなコマンドをバッチ モードで動作させる方法はありますか?

具体的には、スクリプトを作成してバッチ モードで実行する必要があります。次のような関数を呼び出す必要があります (これは私が書いたものではなく、編集することもできません)。

testfun <- function (...)
{
  args <- list(...)
  if (any(!sapply(args, is, "numeric")))
    stop("All arguments must be numeric.")
  else
    writeLines("All arguments look OK.")
}

この関数にリストを渡す必要があります。のようなコマンドはtestfun(list(1, 2, 3))、対話モードで機能します。ただし、バッチ モードでは、エラーが発生します: Error in match.fun(FUN) : object 'is' not found. 問題を解決しようとdebugger()しましたが、何の洞察も得られませんでした。r-help、R FAQ、R Inferno も調べましたが、この問題を説明するものは見つかりませんでした。

4

1 に答える 1

7

Rscript は、時間がかかるため、デフォルトではメソッド パッケージをロードしません。の詳細セクションから?Rscript:

 ‘--default-packages=list’ where ‘list’ is a comma-separated list
      of package names or ‘NULL’.  Sets the environment variable
      ‘R_DEFAULT_PACKAGES’ which determines the packages loaded on
      startup.  The default for ‘Rscript’ omits ‘methods’ as it
      takes about 60% of the startup time.

--default-packages引数を使用してメソッドをロードさせることができます。

> Rscript -e 'sapply(1:3, is, "numeric")' --default-packages='methods'
[1] TRUE TRUE TRUE
于 2012-06-27T00:58:57.217 に答える