我有一个问题,我似乎无法在同一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会话中求值?
答案 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对输出进行分类...但是我真的不知道这将完成什么。
这是终端交互和运行。祝你好运