read.csv 进入嵌套列表并设置元素名称
read.csv into nested list and set element names
我正在将几个不同目录中的 .csv 文件读取到嵌套列表中。按照
filenames <- list(a = list.files("/some_dir_1", pattern = "*.csv"), # not a reproducible example but for demonstration purposes
b = list.files("/some_dir_2", pattern = "*.csv"),
c = list.files("/some_dir_3", pattern = "*.csv"))
# creates a nested of list of file paths
dat.list <- lapply(filenames, lapply, read.csv)
# creates a nested list of dataframes, with the same structure as filenames
我想用文件路径命名每个元素。
这可以通过一一命名来完成,例如
names(dat.list[["a"]]) <- filenames[["a"]]
或者把它放在一个for循环中,但是有没有更通用的方法?最好是 tidyverse
友好的解决方案,按照...
filenames %>% lapply(., lapply, read_csv) %>% #some naming call#
还是我用错了方法?
非常感谢任何帮助,谢谢。
根据描述,我们可以使用 lapply
循环遍历 'filenames' 的序列,或者使用 for
循环来更改每个 names
dat.list[[i]]
个元素
lapply(seq_along(filenames), function(i) setNames(dat.list[[i]], filenames[[i]]))
或 Map
Map(setNames, dat.list, filenames)
或
for(i in seq_along(filenames)) names(dat.list[[i]]) <- filenames[[i]]
如果我们想使用 tidyverse
,基于 base R
Map
的等效选项将是
library(purrr)
map2(dat.list, filenames, setNames)
注意:for
循环分配将反映原始 'dat.list',而我们必须将 lapply
分配回 dat.list
以更新 'dat.list'
数据
filenames <- list(a = c('a1.csv', 'a2.csv'), b = c('b1.csv', 'b2.csv'))
set.seed(24)
dat.list <- lapply(1:2, function(i) replicate(2, as.data.frame(matrix(sample(1:5, 5*5,
replace = TRUE), 5, 5)), simplify = FALSE))
我正在将几个不同目录中的 .csv 文件读取到嵌套列表中。按照
filenames <- list(a = list.files("/some_dir_1", pattern = "*.csv"), # not a reproducible example but for demonstration purposes
b = list.files("/some_dir_2", pattern = "*.csv"),
c = list.files("/some_dir_3", pattern = "*.csv"))
# creates a nested of list of file paths
dat.list <- lapply(filenames, lapply, read.csv)
# creates a nested list of dataframes, with the same structure as filenames
我想用文件路径命名每个元素。
这可以通过一一命名来完成,例如
names(dat.list[["a"]]) <- filenames[["a"]]
或者把它放在一个for循环中,但是有没有更通用的方法?最好是 tidyverse
友好的解决方案,按照...
filenames %>% lapply(., lapply, read_csv) %>% #some naming call#
还是我用错了方法?
非常感谢任何帮助,谢谢。
根据描述,我们可以使用 lapply
循环遍历 'filenames' 的序列,或者使用 for
循环来更改每个 names
dat.list[[i]]
个元素
lapply(seq_along(filenames), function(i) setNames(dat.list[[i]], filenames[[i]]))
或 Map
Map(setNames, dat.list, filenames)
或
for(i in seq_along(filenames)) names(dat.list[[i]]) <- filenames[[i]]
如果我们想使用 tidyverse
,基于 base R
Map
的等效选项将是
library(purrr)
map2(dat.list, filenames, setNames)
注意:for
循环分配将反映原始 'dat.list',而我们必须将 lapply
分配回 dat.list
以更新 'dat.list'
数据
filenames <- list(a = c('a1.csv', 'a2.csv'), b = c('b1.csv', 'b2.csv'))
set.seed(24)
dat.list <- lapply(1:2, function(i) replicate(2, as.data.frame(matrix(sample(1:5, 5*5,
replace = TRUE), 5, 5)), simplify = FALSE))