我可以遍历目录中的所有文件。但是,我想迭代某些文件而不是所有文件。我想使用指数。
我想通过使用file_id
向量来实现此目的。每个向量元素都是“文件”中的索引。
例如:我在一个目录中有500个文件,我只想迭代三个文件2,4,15。我生成了一个名为file_id = c(2, 4, 15)
的向量。现在,我如何只迭代这些文件或索引,例如files[2]
,files[4]
,files[15]
,它们只能从文件2,4和15获取数据,而不是全部500个文件。
#get a list of all the files in directory.
files <- list.files(directory, full.names = TRUE)
#iterate over all the files in directory, and get file data
for (item in files){
filedata <- read.csv(item)
}
#What I want to do is only iterate over following files indicated in file_id vector. That will open files 2,4, and 15 nothing else.
file_id = c(2, 4, 31)
答案 0 :(得分:4)
在for
循环内迭代时,语法为:
for(index in SET)
其中index
是您的迭代器,SET
是可以转换为向量的任何东西(即使是矩阵或数组,它也会循环遍历每个元素)。
#get a list of all the files in directory.
files <- list.files(directory, full.names = TRUE)
file_id = c(2, 4, 31)
#iterate over all the files in directory, and get file data
for (i in file_id){
filedata <- read.csv(files[i])
}
在这里,您只需要修改file_id
来循环播放特定文件。
答案 1 :(得分:2)
查找所有文件,然后使用[]
运算符将它们编入索引,作为普通数组。
all.files <- list.files(directory, full.names = TRUE)
file_id <- c(2, 4, 31)
for (item in all.files[file_id])
{
filedata <- read.csv(item)
}
为了提高可读性,我倾向于避免直接索引函数调用,如注释中所示。
更好的是,你应该做的是完全转储for
循环并使用*apply
函数之一。
例如
all.files <- list.files(directory, full.names = TRUE)
file_id <- c(2, 4, 31)
filedata <- sapply(all.files[file_id], function(f)
{
read.csv(f)
})
这将返回一个包含每个文件元素的列表。然后,您可以使用[[]]
运算符访问每个文件的内容。
例如
filedata[[2]]
将返回第二个文件的内容(即id为4的文件)