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

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

  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
}

person dad    schedule 01.10.2018    source источник
comment
Вы правы, определенно лучше реализовать это через список, но спасибо, что настроили меня на get(), это именно то, что я искал.   -  person dad    schedule 02.10.2018


Ответы (1)


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

person MrFlick    schedule 09.10.2018