R Windows中的多个shell命令

R Windows中的多个shell命令,r,R,我试图在R中复制一个shell命令,但无法理解如何将命令串在一起。这只返回工作文件夹的内容(system()由于某种原因失败): 现在,让我们尝试导航到C驱动器并运行dir(不使用明显的dir C:) 因此,似乎不能单独输入命令,因为shell不记得工作目录。所以 > (cmd = "cd C: + dir") [1] "cd C:\ndir" > shell(cmd) C:\ 没有运气,因为没有报告C:文件夹。我尝试过的其他方法也失败了。非常感谢您的建议。我使用Linux,这对我

我试图在R中复制一个shell命令,但无法理解如何将命令串在一起。这只返回工作文件夹的内容(
system()
由于某种原因失败):

现在,让我们尝试导航到C驱动器并运行
dir
(不使用明显的
dir C:

因此,似乎不能单独输入命令,因为shell不记得工作目录。所以

> (cmd = "cd C:
+ dir")
[1] "cd C:\ndir"
> shell(cmd)
C:\

没有运气,因为没有报告C:文件夹。我尝试过的其他方法也失败了。非常感谢您的建议。

我使用Linux,这对我来说很有用:

system("cd ..;ls")
导航到上一个目录并在那里运行ls/dir。在您的情况下,在Windows上,这显然是有效的:

shell("cd C: & dir")
或以字符向量的形式获取输出:


shell(“cd C:&dir”,intern=T)
在Linux上:
系统(“cd..;ls”,intern=T)
不知道这是否有帮助,但在MacOS上使用
系统时将命令折叠为一个字符串是可行的

cmds <- c("ls", "cd ..", "ls");
system(paste(cmds, collapse=";"))
cmds解释了
system
无法工作的原因:它直接在Windows上执行命令,而不首先生成shell

shell
(或者更好的是,
system2
)是一个不错的选择,但是正如您所注意到的,
shell
总是会产生一个新的shell,这样对环境的更改就不会继续下去
system2
也不能直接工作,因为它引用了自己的命令(因此不允许命令链接)

在此上下文中,正确的解决方案是不使用shell命令更改目录。改用
setwd

setwd('C:')
system2('dir')
如果要在执行命令后重置工作目录,请使用以下命令:

local({
    oldwd = getwd()
    on.exit(setwd(oldwd))
    setwd('C:')
    system2('dir')
})
这是一个来自的解决方案。这解决了我调用windows
dir
命令时遇到的问题:

system("cmd.exe /c dir", intern=TRUE) 

文档中明确指出,这在Windows上不起作用。可以工作,谢谢
shell(“cd C:&dir,intern=T)
返回字符向量文档特别说明这在Windows上不起作用。是的,使用shell而不是系统正如Konrad所指出的,有更好的方法在
R
中完成任务。例如,使用指定路径名的
R
dir
函数
dir(path='E:/documents/r',pattern='whatever…')
注意,setwd更好。
local({
    oldwd = getwd()
    on.exit(setwd(oldwd))
    setwd('C:')
    system2('dir')
})
system("cmd.exe /c dir", intern=TRUE)