首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

「R」用purrr实现迭代

因为R是一门函数式编程语言,我们可以先将for循环包装在函数中,然后再调用函数,而不是使用for循环,因此for循环在R中不像在其他编程语言中那么重要。...接下来我们将学习和使用purrr包,它提供的函数可以替代很多常见的for循环应用。R基础包中的apply应用函数族也可以完成类似的任务,但purrr包的函数更一致,也更容易学习。...使用purrr函数替代for循环的目的是将常见的列表问题分解为独立的几部分: 对于列表的单个元素,我们能找到解决办法吗?如果可以,我们就能使用purrr将该方法扩展到列表的所有元素。...使用purrr,我们可以解决子问题,然后用管道将其组合起来。 映射函数 先对向量进行循环,然后对其每一个元素进行一番处理,最后保存结果。...每种类型的输出都有一个相应的函数: map()用于输出列表 map_lgl()用于输出逻辑型向量 map_dbl()用于输出双精度型向量 map_chr()用于输出字符型向量 每个函数都使用一个向量(注意列表可以作为递归向量看待

4.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    R包基础实操—tidyverse包

    1 readr包:快速读写 1-1 readr包提供了几个新函数,能够更快的读取文件 readr包中的主要的函数有: read_csv,read_tsv,read_table,read_delim, write_csv...包:函数式编程 用R写循环从低到高有三种境界:手动 for 循环,apply 函数族,purrr 包泛函式编程。...包讲解 map系列函数的返回值如下: map_chr(.x, .f): 返回字符型向量 map_lgl(.x, .f): 返回逻辑型向量 map_dbl(.x, .f): 返回实数型向量 map_int...(.x, .f): 返回整数型向量 map_dfr(.x, .f): 返回数据框列表,再 bind_rows 按行合并为一个数据框 map_dfc(.x, .f): 返回数据框列表,再 bind_cols...:purrr包: https://zhuanlan.zhihu.com/p/168772624 [9] R语言| 向量化操作purrr包: https://www.huaweicloud.com/articles

    3.4K30

    R语言进阶笔记5 | purrr替代循环

    purrr替代循环 1 purrr循环 引用知乎张敬信的说法: ❝用 R 写 「循环」 从低到高有三种境界:手动 for 循环,apply 函数族,purrr 包泛函式编程。...❞ R写循环有三个境界: 手动for循环 apply循环 purrr泛函式编程 其中,手动for循环我最常用,apply系列半吊子,purrr函数一窍不通,所以要学习一下。...2 泛函式函数 泛函式定义 函数的函数成为泛函式,map(x,f)中,map是函数,f也是函数,f是map的参数,那么map就是泛函数。...不同的后缀 *_chr,比如map_chr, map2_chr, pmap_chr等,返回字符 *_lgl,返回逻辑型向量 *_dbl,返回实数型向量 *_int,返回数字型向量 *_df,返回数据库...1] -0.2338953 $x3 [1] -0.3660053 $x4 [1] 0.02137338 7 map的用法1:批量建模 这里使用我的R包learnasreml中的MET数据,进行测试

    3.4K10

    Day7:R语言课程 (R语言进行数据可视化)

    编程语言通常有办法允许多次执行代码,或者在“循环”中执行。虽然R语言也有“循环”,但有些函数更直接,例如apply()函数map()族和函数族。...`map`系列函数 purrr包map()提供了一系列函数,它是tidyverse中的一个包。参阅R for Data Science一书。...该族包括几个函数,每个函数的输入都是向量,输出是指定类型的向量。例如,用这些函数对向量中的每个元素或数据框中的每列或列表的每个组件执行某些任务/函数,依此类推。 map() 创建一个列表。...map_lgl() 创建一个逻辑向量。 map_int() 创建一个整数向量。 map_dbl() 创建一个“双”或数字向量。 map_chr() 创建一个字符向量。...library(purrr) # Load the purrr samplemeans map_dbl(rpkm_ordered, mean) 可以将这个包含的12个元素的向量作为一列,添加到

    6K10

    R:purrr包用于循环迭代

    purrr中有多个迭代函数,可以用于快速解决循环迭代的问题,purrr中常用的迭代函数有map、map2、walk、reduce等等。...map map(.x, .f, ...) map函数接受一个向量、列表,对其每一个元素执行函数。 数据框其实是一种格式化表示的列表,所以也可以使用map迭代。 map函数默认返回列表。...# [1] 3.758 # # $Petal.Width # [1] 1.199333 # # $Species # [1] NA 如果返回值需要是一个数值向量,而不是列表,也可以使用map_dbl...iris %>% dplyr::select(-Species) %>% map(summary) %>% map_dbl(3) map2 map2(.x, .y, .f, ...) map2可以对两个向量...系列函数,还有一批形式类似的walk函数,如walk、walk2、pwalk等等,他们用于一些不需要返回值的操作,如绘图和读写文件。

    1.6K10

    R-Purrr的使用,加速数据处理

    R-Purrr的使用,加速数据处理 Tidyverse中包含一个purrr程序包,之前在看数据处理分析时候,一直看到别人的code中,涵盖purrr,map函数,但是一直不知道这个是干什么的,现在发现purrr...Purrr 主要是替换for循环的使用。 Purrr引入了map函数以及一些用于操纵list的新函数。cheatsheet可以速查一些关于Tidyverse使用方法。...这篇文章是快速教你使用purrr。 因为Purrr的操作对象基本上都是关于list,所以对R的基本Number,Vector,dataframe及list又个了解。...map 循环例子1 譬如我们对c(1, 4, 7)进行每个数➕10,我们有.x vetcor数据,然后编写.f funtion数据,合并到map中。...在这里,我使用了参数名称.x,但我可以使用任何参数。

    71620

    人工智能大模型的好处之任意数据结构的转换

    如下所示的沟通过程: 在R语言中,如果有一个列表(list),其中每个元素都是向量,并且你想要将这个列表转换成一个数据框(data frame),可以使用do.call函数结合rbindlist函数从data.table...如果列表中的向量长度不相等,直接使用 rbindlist 或者 Reduce 结合 cbind 会遇到困难,因为这些函数通常要求所有向量具有相同的长度以便能够形成一个规则的数据框。...name") # 查看结果 print(df) 使用 purrr 包的 map_dfr 函数:map_dfr 可以应用于列表的每个元素,并将结果合并为一个数据框。...= c(7) ) # 使用 map_dfr 转换每个向量为数据框,然后合并 df map_dfr(mylist, ~data.frame(.x, check.names = FALSE))...而 purrr 的 map_dfr 方法提供了更多的灵活性,尤其是在处理更复杂的列表结构时。手动处理则允许你完全控制转换过程,但可能需要更多的代码。

    8910

    125-R编程19-请珍惜R向量化操作的特性

    但还是按照inferno 中的内容,特此额外总结一下。 1-别用循环的方言教R做事 lsum <- sum(log(x)) 我们的所有操作,都可以对向量的每一个元素执行。...同样在[[50-R茶话会10-编程效率提升指北]] 我们举过如下例子:在计算总和、元素乘积或者每个向量元素的函数变换时, 应使用相应的函数,如sum, prod, sqrt, log等。...其中有的内建函数, 如sum, prod, cumsum, cumprod, mean, var, sd等。这些函数以编译程序的速度运行, 不存在效率损失。...apply 族一直是我所钟爱的循环调用方式,但从本质上来说,它们还是循环而非向量化编程的一份子。...这种情况下,我们也应尽量避免循环和嵌套次数。比如学习一下时间复杂度的问题,亦或是算法相关的内容。 4-过度向量化问题 本质上向量化操作还是空间与时间的tradeoff。

    65630

    R 语言 逻辑运算:TRUEFALSE | 专题3

    > TRUE & FALSE #返回[1] FALSE > 0.2 & 0 #返回[1] FALSE (3)在R语言中标量常被看作含有一个元素的向量,但在逻辑运算中是存在差异。...上表中逻辑“与”【&】和逻辑“或”【 | 】是对向量的逻辑运算(虽然单个标量也适用),但其返回的结果是逻辑向量,是对逻辑运算中的每一组元素进行逻辑运算后返回的结果。...因此,此处引入另外两个不常用但需要了解的逻辑运算符: x&&y:标量的逻辑“与”运算,判断逻辑x和y中只要包含一个"&"运算的TRUE行即返回TRUE标量 x||y :标量的逻辑“或”运算,判断逻辑向量...) > #---比较&与&&---# > x&y [1] TRUE FALSE FALSE FALSE > > x&&y #对比第9行结果可以发现,在逻辑向量逻辑运算中只要包含一个"&"运算的TRUE...rep(0,5), b = c(-1:3)),nrow = 2,byrow = TRUE) df <- data.frame(df, stringsAsFactors = FALSE) df #自定义循环判断全

    5.9K10

    这些逻辑运算符你都使用正确了吗?

    > TRUE & FALSE #返回[1] FALSE > 0.2 & 0 #返回[1] FALSE (3)在R语言中标量常被看作含有一个元素的向量,但在逻辑运算中是存在差异。...上表中逻辑“与”【&】和逻辑“或”【 | 】是对向量的逻辑运算(虽然单个标量也适用),但其返回的结果是逻辑向量,是对逻辑运算中的每一组元素进行逻辑运算后返回的结果。...因此,此处引入另外两个不常用但需要了解的逻辑运算符: x&&y:标量的逻辑“与”运算,判断逻辑x和y中只要包含一个"&"运算的TRUE行即返回TRUE标量 x||y :标量的逻辑“或”运算,判断逻辑向量...) > #---比较&与&&---# > x&y [1] TRUE FALSE FALSE FALSE > > x&&y #对比第9行结果可以发现,在逻辑向量逻辑运算中只要包含一个"&"运算的TRUE...rep(0,5), b = c(-1:3)),nrow = 2,byrow = TRUE) df <- data.frame(df, stringsAsFactors = FALSE) df #自定义循环判断全

    1K20

    一步解决R中中文字符问题

    ✔ stringr 1.5.1 ✔ ggplot2 3.5.0 ✔ tibble 3.2.1 ✔ lubridate 1.9.3 ✔ tidyr 1.3.1 ✔ purrr...,中文字符也是以方块的形式展示,但是如果我们点击Export将其导出为pdf格式可以看到中文字符正常显示了,如下图所示。...❝Cairo是R中的一个包,用于创建向量图形(如PDF、SVG)和位图图形(如PNG、BMP、GIF、JPEG)。它基于Cairo图形库,该库是一个跨平台的图形API,支持多种输出设备。...❞ 安装cairo包 install.packages("Cairo") 修改Graphics设置 ❝要访问和修改这些设置,可以在RStudio中按照以下步骤操作: 1.打开RStudio 2.在菜单栏中...以上操作为Macos系统 windows系统则需要在代码中使用showtext包进行字体渲染,若不进行渲染则导出pdf时字体会乱码 install.packages("showtext") library

    66710

    R语言中list的批量操作

    这个包的神奇之处在于能批量处理问题,例如,可以读取多个文件,跑模型的时候,可以批量输入多个参数,并把结果合并起来做比较 install.packages("purrr") 接下来我们通过实例来看下此包的具体使用...数据分割 ## 向量分割 require(stats); require(graphics) n <- 10; nn <- 100 g <- factor(round(n * runif(n * nn)...$cyl) 2. list数据的向量化 ###拆分list x <- rerun(2, sample(4)) x %>% flatten() ##去列表化,转为向量 x <- rerun(2, sample...]]) x[[2]]=as.data.frame(x[[2]]) x%>%flatten_dfc() ##多list横向合并,需要列名都不一样 x%>%flatten_dfr() ##读取列表中的同一个名称的子列表数据...1:10 %>% map(~ rnorm(10, .x)) ##返回数据框 1:10 %>% Map_dfc(rnorm, n = 10) ##判断需要操作的子列表中的所有值 map_if(

    1.9K10

    irGSEA:基于秩次的单细胞基因集富集分析整合框架

    假如将新的单细胞数据集整合到现有数据中,使用这些FCS方法需要重新计算每个细胞的基因集富集分数。这个步骤可能是繁琐且资源密集的。...; AUCell 基于单个样本中的基因表达排名,使用曲线下面积来评估输入基因集是否在单个样本的前5%表达基因内富集; UCell 基于单个样本的基因表达排名,使用Mann-Whitney U统计量计算单个样本的基因集富集分数...使用全局表达谱对差异分数进行标准化。 标准化这一步容易受样本构成的影响。 JASMINE 根据在单个细胞中表达基因中的基因排名和表达基因中基因集的富集度计算近似平均值。...::map( ~.x %>% dplyr::pull(symbol) %>% unique(.)) %>% purrr::set_names(levels(msigdb.h$geneset)) ##...::map( ~.x %>% dplyr::pull(symbol) %>% unique(.)) %>% purrr::set_names(levels(msigdb.go.bp$geneset)

    2.6K11
    领券