1

前の質問に答えて、sed、rsync、sshなどを呼び出すためのRのsystem()の代替:関数は存在しますか、自分で書く必要がありますか、それとも要点を見逃していますか?ハドリーの 答えは、同様の問題に直面したとき、彼は次のような関数を使用したことを示していました。

bash <- function() system("bash")

私は彼のdevtoolsパッケージでオリジナルを見つけました。devtools / R / bash.Rに実装されています

#' Open bash shell in package directory.
#'
#' @param pkg package description, can be path or package name.  See
#'   \code{\link{as.package}} for more information
#' @export
bash <- function(pkg = NULL) {
  pkg <- as.package(pkg)

  in_dir(pkg$path, system("bash"))
}

この点がわかりません。私が発行するとき

bash <- function() system("bash")

それは私をbashシェルに送り、その後exit私をRセッションに戻しますが、機能はありませんbash。次のコマンドペア(Rの最初のコマンド、bashの2番目のコマンド)のいずれかを発行することで、同じ効果を得ることができるようです。

system('bash')
exit

また

q('yes')
R

打たれた部分は私の部分のコピー/貼り付けエラーが原因でした

bashまた、devtoolsパッケージで関数のそれ以上の使用法を見つけることができません

bash誰かが関数の使い方を理解するのを手伝ってくれませんか。インタラクティブRモード以外のコンテキスト(スクリプトや関数内など)で使用できますか?

4

2 に答える 2

7

以前のバージョンには、devtoolsコードをgit/githubにプッシュ/プルするためのいくつかの機能が含まれていました。これは非推奨になりました。

代わりに、コンビニエンス関数bashはパッケージディレクトリでbashエディターを開くだけです。これは、コマンドラインツールを使用してgit/githubと対話できることを意味します。

の目的はbash、パッケージディレクトリでコマンドラインを開くためにいくつかのキーストロークを保存することです。他の機能はありません。

于 2011-10-13T15:40:38.517 に答える
4

次に、どちらも入力しませんでした

bash <- function() system("bash")

まさにこのように、1行で。これは私が得るものです:

> bash <- function() system("bash")
> bash()
[gavin@prometheus cocorresp_check]$ exit
> ls()
 [1] "a"       "b"       "bash"    "cars.lo" "dat"     "Dbig"    "Djackal"
 [8] "foo"     "i"       "jack.t"  "jackal"  "mat"     "mat2"    "meanDif"
[15] "mod"     "N"       "perm"    "x"       "Xa"      "Xab"     "Xb"     
[22] "xct"     "y"
> match.fun("bash")
function() system("bash")

bash()リストされている3番目のオブジェクトであることに注意してください。したがって、最初の行で関数を定義し、2番目の行でそれを使用してbashシェルにドロップします。これをすぐに終了して、Rプロンプトに戻ります。

関数が作業環境で定義されていない場合、関数を定義するために行ったことは何も機能しませんでした。あなたの説明から、Rが実行されたように見えますsystem("bash")

于 2011-10-13T15:48:33.073 に答える