1

针对前面的问题,R 中调用 sed、rsync、ssh 等的 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 shell,然后exit将我返回到 R 会话,但没有任何bash功能。似乎我可以通过发出以下任一命令对来获得相同的效果(R 中的第一个命令,bash 中的第二个)

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")

就像这样,在一行上。这就是我得到的:

> 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()是列出的第三个对象。所以第一行定义了函数,我在第二行使用它来放入一个 bash shell,我立即退出并返回到 R 提示符。

如果该功能未在您的工作环境中定义,那么您为定义它所做的任何事情都不起作用。从您的描述中可以看出 R 刚刚执行system("bash")

于 2011-10-13T15:48:33.073 回答