Используйте lapply / для l oop с системной функцией для команд пакетного терминала - PullRequest
1 голос
/ 19 марта 2020

Я начинаю с терминала больше на моей машине и хотел бы создать рабочий процесс, где у меня будет больший контроль над более повторяющимися задачами. У меня вопрос, могу ли я использовать функцию system, которая берет строку и запускает ее через терминал в пределах al oop? Я вешаю трубку над строкой. Я думаю использовать пакет 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')
})

1 Ответ

2 голосов
/ 19 марта 2020

Использование system в итеративном l oop не должно быть проблемой. Для создания вектора команд вы можете использовать базовые R paste или paste0, хотя glue может быть полезно при работе с более сложными строками.

Создать вектор команд так же просто, как и paste("say", 1:5), который возвращает [1] "say 1" "say 2" "say 3" "say 4" "say 5". Вы можете использовать его в for l oop с system для запуска каждого в последовательности:

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

Если вы на Ма c, вы должны услышать, как TTS произносит каждое число.

Вы можете использовать тот же шаблон для вашего примера, например:

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

Обратите внимание, что здесь я использую paste0, чтобы избежать ненужных пробелов.

...