Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R tips:使用enframe和map2优雅的迭代列表

R tips:使用enframe和map2优雅的迭代列表

作者头像
生信菜鸟团
发布于 2020-06-02 02:22:07
发布于 2020-06-02 02:22:07
2K00
代码可运行
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团
运行总次数:0
代码可运行

在R中更易于处理的数据形式是data.frame,list并不是太好处理,常用操作就是对它进行循环迭代。

比如,构建如下list:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyverse)
library(magrittr)
test <- list(norm = rnorm(10,0,1),
             unif = runif(10,-1,1),
             pois = rpois(10,1))
test
#$norm
# [1]  0.30288746 -0.16133633  0.82184522 -0.04186266 -0.41756076 -0.36109442  0.26533605
# [8]  0.49534144  1.22205509  0.30212585
#
#$unif
# [1]  0.59694648  0.53584905  0.62548846  0.41625085 -0.33262723  0.78838499 -0.63705366
# [8]  0.06881095  0.87634516  0.22751384
#
#$pois
# [1] 0 3 0 2 1 1 1 1 1 0

使用for或者lapply迭代

可以使用for循环或者lapply对列表进行迭代,比如要绘图,则可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (i in test) plot(i)
lapply(test, plot)

都是将列表中的三个元素绘制出三个散点图。

使用enframe和map2迭代列表

但是其实可以有更优雅的方式迭代列表,还可以完成更多的操作,比如在每个图形上加上各自的注释信息。

先将列表转变为一种特殊的tibble:包含两列name和value,name是列表名,value是相应的值。对于test而言,value就是上面创建的三个向量,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test_t <- enframe(test)
tets_t
#    # A tibble: 3 x 2
#  name  value     
#  <chr> <list>    
#1 norm  <dbl [10]>
#2 unif  <dbl [10]>
#3 pois  <int [10]>

tibble可以理解为是一种高级的data.frame,基本属性是类似的。

同时对name和value两列数据进行迭代,使用map2函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 可以使用plot绘制
# name和value的值分别使用.x和.y引用
test_t %$% map2(name, value, ~plot(.y, main=.x))

# 也可以使用ggplot2
test_t %$% map2(name, value, function(x, y){
  df <- as_tibble(y) #转换为tibble,列名为value
  df %>% ggplot(aes(x=1:nrow(.), y=value)) + geom_point()
})

三张图,其中一张图(plot绘制)如下:

如果使用ggplot2绘制,则是如下:

这里传递test_t的参数给map2时使用magrittr包的”爆炸运算符“:%$%。它的作用可和with类似,使用它后,管道后面的函数可以直接使用test_t的列名。

ggplot2后面的函数部分,x与y分别是对应name和value,最后绘图即可。

上面的图可以继续优化一下,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test_t %$% map2(name, value, function(x, y){
  df <- as_tibble(y) #转换为tibble,列名为value
  df %>% ggplot(aes(x=1:nrow(.), y=value)) + geom_point() +
    labs(x="Index", y="Value", title = paste0(x, " distribution")) +
    theme_bw()
})

其中的一张图如下:

每个图上面都有标题,这样更容易观察。

另外,上述图还可以直接交给cowplot拼图,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test_t %$% map2(name, value, function(x, y){
  df <- as_tibble(y) #转换为tibble,列名为value
  df %>% ggplot(aes(x=1:nrow(.), y=value)) + geom_point() +
    labs(x="Index", y="Value", title = paste0(x, " distribution")) +
    theme_bw()
}) %>% cowplot::plot_grid(plotlist=., ncol=3, align="h")
ggsave("test.pdf", height = 4, width = 16)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
跟着Molecular Ecology学数据分析:使用R语言对群体SNP数据做主成分分析
找到了一本电子书 https://bookdown.org/hhwagner1/LandGenCourse_book/ 里面用到这篇文章的数据做了群体PCA,今天的推文我们试着重复一下这本电子书中的代码
用户7010445
2021/12/01
1.1K0
跟着Molecular Ecology学数据分析:使用R语言对群体SNP数据做主成分分析
ggtree-给你的进化树盛世美颜
ggtree是ggplot2的拓展包,可以应用于进化树的绘制,还能对进化树丰富的注释分析。
作图丫
2022/03/29
12.3K0
ggtree-给你的进化树盛世美颜
目前最全的R语言-图片的组合与拼接
李誉辉,四川大学硕士在读,研究数据分析与可视化,以及网络爬虫。誉辉兄最近出的文章都是很系统的,从R ggplot2的基础讲解到三维数据可视化plot3D,文章都整理讲解得很全面系统,我本人也是很喜欢这样的文章,故而推荐给大家。
生信宝典
2019/09/29
5.6K0
目前最全的R语言-图片的组合与拼接
ggplot2优雅的绘制配对连线云雨图
❝本节来介绍如何使用ggplot2绘制配对连线云雨图,图形倒也简单主要是细节;小编给了两个案例来进行展示,有循环绘图需求的可以看最后一个案例;❞ 加载R包 library(tidyverse) library(ggsignif) library(gghalves) library(ggsci) 数据清洗 df <- read_tsv("data.xls") %>% filter(year %in% c(1957,2007),continent !="Oceania") %>% select(
R语言数据分析指南
2022/12/20
9700
ggplot2优雅的绘制配对连线云雨图
RNA-seq 详细教程:可视化(12)
当我们处理大量数据时,以图形方式显示该信息以获得更多信息,可能很有用。在本课中,我们将让您开始使用探索差异基因表达数据时常用的一些基本和更高级的图,但是,其中许多图也有助于可视化其他类型的数据。
数据科学工厂
2023/02/27
9820
RNA-seq 详细教程:可视化(12)
R tips:ggplot2进行多维原位图绘制
R中可以使用ggplot2的geom_tile图层绘制热图,可是有的时候我们想要每一个热图格子里面可以展示多维的信息:多个基因表达量、多个组别数据等等,而不是一个热图仅展示了一个表达量信息。本文可以解决这个需求。
生信菜鸟团
2025/01/07
1160
R tips:ggplot2进行多维原位图绘制
R:ggtext包丰富ggplot2中文本的表现力
ggtext让ggplot2图像也可以使用html、markdown及css语法,丰富了ggplot2文本的表现力。
生信菜鸟团
2020/12/03
1.8K0
R:ggtext包丰富ggplot2中文本的表现力
技术贴:R语言拼图全面介绍
说起R语言的拼图,可能大家一点都不陌生,比如常用的“cowplot”和“patchwork”。gridExtra包也提供了一个拼图函数”grid.arrange“。另外,南方医科大学余光创教授也开发了一个更为神奇的拼图R包:aplot。本文将依次对它们的用法进行介绍。
作图丫
2022/03/29
5.9K0
技术贴:R语言拼图全面介绍
119-R可视化37-利用循环实现ggplot批量作图并拼图
其实简单的R 拼图,我喜欢patchwork 的加减乘除。但这种4x4 布局的图片,对象又多,一个个创建不现实;代码写起来,也非常不优雅。
北野茶缸子
2022/04/05
6.4K0
119-R可视化37-利用循环实现ggplot批量作图并拼图
R tips:使用最近邻算法进行空间浸润带的计算
以10X的官方xenium示例数据为例https://www.10xgenomics.com/datasets/ffpe-human-breast-with-pre-designed-panel-1-standard。
生信菜鸟团
2025/02/18
1290
R tips:使用最近邻算法进行空间浸润带的计算
「R」cowplot(一)介绍
cowplot是ggplot2包的一个简单插件(或称拓展包),它的目的是为ggplot2提供一个出版级别的主题,使用少量代码即可实现主题统一的修改,如轴标签大小、画图背景。它主要的作用是可以给研究生和博士后更加容易的画图。
王诗翔呀
2020/07/06
2.4K0
「R」cowplot(一)介绍
数据可视化编程实战_大数据可视化
经常有对比R,Python和Julia之间的讨论,似乎R语言在这三者之中是最为逊色的,实则不可一概而论。
全栈程序员站长
2022/11/17
8.8K0
数据可视化编程实战_大数据可视化
R tips:进一步的debug并修复cnetplot绘图bug
在R升级到4.0+后,clusterProfiler的cnetplot会报如下的rescale错误,这个现象以及解决方法在以前的推文:R tips:debug并修复一个ggplot2绘图错误的例子中曾经说过。现在再提到一次,主要是对这个现象进一步的进行深入探讨,并给出一个更加优雅的解决办法。
生信菜鸟团
2022/05/24
3.3K0
R tips:进一步的debug并修复cnetplot绘图bug
独家 | 不同机器学习模型的决策边界(附代码)
本文利用Iris数据集训练了多组机器学习模型,并通过预测大量的拟合数据绘制出了每个模型的决策边界。
数据派THU
2020/04/14
1.9K0
独家 | 不同机器学习模型的决策边界(附代码)
生信技能树R语言学习直播配套笔记
1.1 判断数据类型class() 1.2 按Tab键自动补全1.3 数据类型的判断和转换 (1)is 族函数,判断,返回值为TRUE或FALSE
生信技能树
2022/06/08
1.2K0
生信技能树R语言学习直播配套笔记
108-R可视化32-通过seurat包中的LabelClusters学习ggplot之一
在先前的内容里:[[66-R可视化10-自由的在ggplot上添加文本(柱状图加计数)]],我们提到过添加文本的方法。但是,对于散点图来说,我们需要找到的是一个坐标,而这个坐标,最好可以反映位置散点的中心或附近区域,对这个坐标进行标识。
北野茶缸子
2022/04/05
1.1K0
108-R可视化32-通过seurat包中的LabelClusters学习ggplot之一
R tips:使用glmnet进行正则化广义线性模型回归
线性模型的建模为了提高模型的泛化能力,一般会进行正则化处理,也就是在损失函数的构造上加上正则化项,如L1正则化项或者L2正则化项,L1正则化也就是常说的Lasso回归,将损失函数加上了L1范数,L2正则化就是Ridge回归,损失函数加上了L2范数。正则化项的大小是通过一个超参数(一般命名为lambda)控制,lambda越大则正则化项作用越强,拟合的模型系数会变小或变成0,这个超参数一般使用Cross-validation交叉验证来获取。
生信菜鸟团
2022/04/08
4.6K0
R tips:使用glmnet进行正则化广义线性模型回归
RNA-seq 详细教程:可视化(12)
当我们处理大量数据时,以图形方式显示该信息以获得更多信息,可能很有用。在本课中,我们将让您开始使用探索差异基因表达数据时常用的一些基本和更高级的图,但是,其中许多图也有助于可视化其他类型的数据。
数据科学工厂
2023/01/29
7400
r语言同时画两张图(如何用布局和视口出图)
par(mfrow=c(2,2)),可以理解将绘图区域分割为2×2的矩阵区域,另可参照《R语言实战》3.5图形的组合
全栈程序员站长
2022/07/31
2.5K0
r语言同时画两张图(如何用布局和视口出图)
全网最全的R语言基础图形合集
直方图是一种对数据分布情况进行可视化的图形,它是二维统计图表,对应两个坐标分别是统计样本以及该样本对应的某个属性如频率等度量。
生信学习者
2024/06/12
1130
全网最全的R语言基础图形合集
推荐阅读
相关推荐
跟着Molecular Ecology学数据分析:使用R语言对群体SNP数据做主成分分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验