在 RStudio 中调用系统命令时出现问题

Problems when invoking a system command in RStudio

我正在尝试通过 R 的 IDE RStudio 调用系统命令来 运行 一个 exe 文件。我的 OS 是 Windows。

我有以下目录层次结构:

|_scripts
|_files
  |_prog.exe
|_data
  |_executed_data
    |_case1
    |_case2

我的 exe 文件存储在 files 目录中。经过争论的、随时可用的数据存储在特定的 case# 目录中,其中 # 代表该案例的相应编号。

代码是模块化的。我编写函数,然后使用 purrr::map 在长度与案例数相同的向量上迭代该函数。

代码如下所示:

#Library(processx)
#Library(purrr)

run_exe = function(directory) {

  # Copy .exe file to folder to run
  from_dir = c("../files/prog.exe")
  to_dir = paste0("../data/executed_data/", directory)

  file.copy(from = from_dir,  to = to_dir, overwrite = T)

  # Run .exe file
  processx::run( command = paste0("../data/executed_data/",directory,"/prog.exe" )
}

# Run function over all cases
all_cases = list.files("../data/executed_data")
purrr::map(all_cases, run_exe)

使用 map 进行 运行 的尝试失败,并向控制台打印一条错误消息。打印的消息说 exe 文件的子例程之一找不到特定文件,因此出现错误。

我注意到假定丢失的文件的名称以小写形式打印,因此我重命名了该文件以确保所有字母都很小。仍然,它没有用。

消息还说 error.err 文件已打印。发生错误时确实会打印此文件,但是,如果我直接转到 cases# 目录之一并双击 exe 文件,它 运行 没有问题。由于 运行 没有问题,我知道没有丢失文件。

考虑到这个问题涉及 运行 一个 exe 文件,我认为不可能有一个可重现的例子。但是,如果您在尝试调用系统功能时遇到类似问题,请分享您找到的解决方案。

P.S.: 在使用 processx::run 之前,我试过 systemsystem2sys 函数,但同样没有成功。

这样做就可以了:

# List all directory paths. These are the directories where data are stored.
all_dir = dir(here::here('data', 'executed_data'), full.names = TRUE)

# Function to process all your data. Note the arg "wd"
process_data = function (data_dir) {
    processx::run(here::here('files', 'prog.exe'), wd = data_dir)
}

# Iterate over all directories
purrr::map(.x = all_dir, .f = process_data)

重要的是 .Rproj 与目录 scriptsfilesdata.

处于同一级别