将 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 的 paste
或 paste0
,尽管 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
以避免不必要的空格。
我开始更多地在我的机器上使用终端,并希望创建一个工作流,以便我可以更好地控制更多重复性任务。我的问题是,我可以使用 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 的 paste
或 paste0
,尽管 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
以避免不必要的空格。