【发布时间】:2019-11-18 15:05:38
【问题描述】:
我有:
- 包含文件的目录(比如说两个:A 和 B);
- 存储目录的两个字符对象(
dir_A、dir_B); - 一个将目录作为参数并返回在那里找到的文件名列表的函数(对我来说这是一种方便的方式,不同于
list.files())。
directories <- c(dir_A, dir_B)
read_names <- function(x) {foo}
使用 for 循环,我想创建对象,每个对象都包含 read_names() 给出的不同目录的文件列表。本质上,我想使用一个 for 循环来做相当于:
files_A <- read_names(dir_A)
files_B <- read_names(dir_B)
我写的循环如下:
for (i in directories) {
assign(paste("files_", sub('.*\\_', '', deparse(substitute(i))), sep = ""), read_names(i))
}
但是,尽管在 for 循环之外 deparse(substitute(dir_A)) 返回“dir_A”(因此,上面编写的 sub() 函数将返回“A”),但在我看来,在 for 循环中 @ 987654330@ 使i 不再是目录之一,而只是i。
因此deparse(substitute(i))返回"i",上面for循环的输出只有一个名为files_i的对象,它包含迭代最后一个目录中的文件列表,因为那是最后一个在files_i 上被覆盖。
如何让 for 循环读取 i 在那一刻代表的对象的名称(或在我的情况下是名称的一部分,但它是相同的)?
【问题讨论】:
-
写入
directories <- c(dir_A, dir_B)后,变量dir_A没有关联,只有执行创建目录的语句时dir_A的值。
标签: r for-loop iteration objectname