假设我想要获取这些文档,我以非常清晰的模式命名,例如EIS_Chip14_1_pre。一切都是常数,除了名称中的两个数字,范围从6:18到1:4。我正在使用for循环:
如何将“i”和“n”都包含在我的存储矢量标题中,这样我就不会覆盖它?
dat <- vector(mode = "list")
i <- numeric(13)
n <- numeric(4)
for(i in 6:18){
for(n in 1:4){
path <- paste0("C:/.../downloads/EIS_Chip",i,"_", n, "_pre.dat")
dat_(i)[[n]] <- read.csv(file = path)
}
}
答案 0 :(得分:0)
这不一定是最好的解决方案,但它应该为你做到这一点。
在外部循环的顶部,使用空列表初始化变量tmp
。在内部循环内,使用[[
将结果存储到该列表的元素中。内部循环完成后,assign
tmp
中的值为使用paste0
动态命名的变量。
dat <- vector(mode = "list")
i <- numeric(13)
n <- numeric(4)
for(i in 6:18){
tmp = list()
for(n in 1:4){
path <- paste0("C:/.../downloads/EIS_Chip",i,"_", n, "_pre.dat")
list[[n]] <- read.csv(file = path)
}
assign(paste0("dat_",i),tmp)
}
更好的解决方法可能是使用expand.grid
获取i
和n
的每个组合,然后编写一个使用这些值读入文件的函数。最后,使用类似purrr::pmap
的内容来迭代您的值。这将返回一个包含52个元素的列表,每个文件对应一个元素。
read_in_file = function(i,n){
path = paste0("C:/.../downloads/EIS_Chip",i,"_", n, "_pre.dat")
return(read.csv(file=path))
}
combinations = expand.grid(i = 6:18, n = 1:4)
dat = purrr::pmap(combinations,read_in_file)
这是有效的,因为expand.grid
会返回data.frame
,这是一种特殊的列表。因为我们恰当地命名了输入,purrr::pmap
处理输入列表并将它们正确地分配给函数。