Как построить и перебрать группу выражений, ссылающихся на объекты среды (без структуры списка)?[Р] - PullRequest
0 голосов
/ 01 октября 2018

Я хочу упростить приведенное ниже в функциональной форме:

  write_file(s01e01, 's01e01.txt')
  write_file(s01e02, 's01e02.txt')
  write_file(s01e03, 's01e03.txt')
  write_file(s02e01, 's01e01.txt') ...

Эти символьные объекты s01e01 и т. П. Все существуют в моей глобальной среде с именем s[01-05]e[01-03].Я знаю, что мог бы просто поместить их все в список и записать их в файлы с функциями *apply или purrr, но есть ли способ ссылаться на все их голые имена внутри функции, используя вместо этого указанный строковый шаблон?

Я знаю, что могу получить нужные строки имени файла, используя

names <- c('s01e01', 's01e02', 's01e03', ... , 's05e03')
files <- paste(names, 'txt', sep = '.')

Итак, как бы мне построить функцию по линиям

write_txt_files <- function(names) {
 files <- paste(names, 'txt', sep = '.'))

 # 15 variables from s01e01 to s05e03
 c1 <- c('01', '02', '03', '04', '05')
 c2 <- c('01', '02', '03')
 varnames <- paste0(paste0('s', c1), rep(paste0('e', c2), 5)) %>% sort
 vectorized_write_file(convertStringToExpr(varnames), files)
                       # ^bare object                 ^strings
}

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете использовать get() вместо вашей функции convertStringToExpr().Это получит значение переменной с именем строки, которую вы передаете ей.Но имейте в виду, что наличие всех этих различных переменных в вашем глобальном пространстве имен не является хорошей практикой.Если бы вы сохранили все эти объекты в (именованном) списке, было бы намного проще работать.Это как минимум R-way.

...