将 lapply/for 循环与系统函数一起用于批量终端命令

Use lapply/for loop with system function for batch terminal commands

我开始更多地在我的机器上使用终端,并希望创建一个工作流,以便我可以更好地控制更多重复性任务。我的问题是,我可以使用 system 函数,它接受一个字符串并在一个循环中通过终端运行它吗?我的挂断是在一个字符串上循环。我的想法是使用 glue 包,但我想知道是否有用于此的基本函数或比调用外部包更好的方法?

library(glue)

setwd(path_to_files)
dir.create('pdf')

all_files <- list.files()

lapply(all_files, function(x){
  system('sytsunoconv -f [format] pdf  {x}.pptw')
})

在迭代循环中使用 system 应该不是问题。要创建命令向量,您可以使用基本 R 的 pastepaste0,尽管 glue 在处理更复杂的字符串时很有用。

创建命令向量就像 paste("say", 1:5) 一样简单,returns [1] "say 1" "say 2" "say 3" "say 4" "say 5"。您可以在 for 循环中使用它,每个循环 system 到 运行 依次为:

for (command in paste("say", 1:5)) {
    system(command)
}

如果您使用 Mac,您应该会听到 TTS 发音每个数字。

您应该能够为您的示例使用相同的模式,例如:

for (command in paste0('sytsunoconv -f [format] pdf ', list.files(), ".pptw")) {
    system(command)
}

请注意,我在这里使用 paste0 以避免不必要的空格。