前言
有的时候我们可能面临一个场景:
- 需要在列表中存放很多数据;
- 可是还需要对这些数据进行标记,以确保xx 是xx 数据;
下面就来解决一下。
开始操作
我把所有我可以想到的方案都列在这里了。选择权在你们。
这里还是以假数据举例子。
1-最暴力的直接输出
你可以批量保存成Rds 或R 的数据。
代码语言:javascript复制for(i in 1:10){
tmp <- as.data.frame(matrix((sample(1:10,20,replace =T )), ncol = 2))
saveRDS(tmp,file = sprintf("./tmp/file%s.RDS", i))
}
亦或是输出成文本格式,或者将数据框输出为csv 格式等等。
2-最缺乏美学的做法,保存到环境
利用assign 函数,批量命名变量var1..n,因为我是一个Rstudio 的保护者,这样会搞得env 栏目很丑,就不举例子了。
3-储存到列表里
3.1-数据框的特殊情况,新增一列
这个我也不是很喜欢,耗费不必要的存储空间。就是将你的数据新增label 列,每个数据框都带有这独立的一列。
不喜欢,不举例子了。
3.2-有名列表
也就是列表中的元素带有名称。
代码语言:javascript复制my_list <- vector("list", 10)
for(i in 1:10){
my_list[[i]] <- as.data.frame(matrix((sample(1:10,20,replace =T )), ncol = 2))
}
names(my_list) <- sprintf("list%s", 1:10)
查看一下:
代码语言:javascript复制> my_list[1]
$list1
V1 V2
1 9 5
2 2 4
3 4 9
4 3 3
5 10 9
6 3 4
7 6 3
8 9 9
9 9 3
10 6 4
3.3-列表中再套列表,专门一个槽放置名称
代码语言:javascript复制my_list <- vector("list", 10)
for(i in 1:10){
my_list[[i]][[1]] <- as.data.frame(matrix((sample(1:10,20,replace =T )), ncol = 2))
my_list[[i]][[2]] <- sprintf("list%s", i)
}
结果如下:
代码语言:javascript复制> my_list[[1]]
[[1]]
V1 V2
1 1 6
2 9 5
3 9 7
4 7 10
5 10 6
6 8 9
7 7 4
8 3 1
9 10 3
10 4 5
[[2]]
[1] "list1"
后话
我个人的操作,主要在3.2与3.3,如果需要加速,foreach 多线程走起。你还有什么好的方法吗