如何构建和循环一组引用环境对象的表达式(没有列表结构)? [R]

How to build and loop through a group of expressions referencing environment objects (without list structure)? [R]

我想以函数形式简化以下内容:

  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]的全局环境中。我知道我可以将它们全部放入一个列表中,然后使用 *applypurrr 函数将它们写入文件,但是有没有一种方法可以在函数中引用它们的所有裸名,使用改为指定字符串模式?

我知道我可以得到我想要的文件名字符串 使用

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
}

您可以使用 get() 代替 convertStringToExpr() 函数。这将获得一个变量的值,该变量具有您传递给它的字符串的名称。但请记住,在全局命名空间中包含所有这些不同的变量并不是一个好的做法。如果您将所有这些对象都保存在一个(命名的)列表中,那么使用起来会容易得多。这至少是 R 方式。