如何在同一shell会话中从R执行多行(cmd)shell?

时间:2019-07-11 17:01:41

标签: r

我有一个问题,我似乎无法在同一cmd会话中评估R中的多行cmd。

最小示例

在Windows上打开cmd并运行

set a=3
ECHO %a%

按预期返回a(3)的值。

我无法使用shell()或任何其他R函数从R运行相同的代码来得到此结果。 system()

到目前为止我尝试过的一切

我尝试了4次明显的尝试

shell("set a=3")
shell("ECHO %a%")
# %a%


shell("set a=3 & ECHO %a%")
# %a%


shell("set a=3 && ECHO %a%")
# %a%


shell("set a=3
      ECHO %a%", intern=TRUE)
# character(0)

期望的结果是能够从R执行cmd代码"set a=3 && ECHO %a%"并使它返回3而不是%a%

问题

如何从R运行多行cmd代码,并使它们全部在同一cmd会话中求值?

1 个答案:

答案 0 :(得分:0)

因此,我不确定这为什么不能像终端机那样工作。我假设它与活动环境和对系统的访问有关。这是一个丑陋的解决方法,但是基本上我知道可以使用的工作是通过Sys.setenv设置环境变量,然后通过shell访问它。因此,这里有一个包装纸...我不知道这是否对您的情况有所帮助:

.shellset <- function(...) {
    var_cmd <- list(...)
    Sys.setenv(...)
    cmd_vars <- paste(sprintf("%%%s%%", names(var_cmd)), collapse = " ")
    shell(sprintf("echo %s", cmd_vars))
}

本质上,我们在内部将环境变量设置为该函数,并通过shell对输出进行分类...但是我真的不知道这将完成什么。

这是终端交互和运行。祝你好运

enter image description here