76-R编程13-批量将不同类型数据标记并保存

2021-12-27 19:08:48 浏览数 (2)

前言

有的时候我们可能面临一个场景:

  • 需要在列表中存放很多数据;
  • 可是还需要对这些数据进行标记,以确保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 多线程走起。你还有什么好的方法吗

0 人点赞