R语言str_replace多匹配

KJY / 2021-03-26


主要参考这个回答:r - stringr str_replace on multiple patterns and replacements? - Stack Overflow

library(stringr)
library(purrr)
reduce2(c('b', 'd'), c('B', 'D'),  .init = 'abcdef', str_replace)
#[1] "aBcDef"

这种方法在大批量替换rowname的时候很有用,所以解析一下。

在purrr包中

map表示映射,可以在一个或多个列表/向量的每个位置上应用相同函数进行计算。map函数的映射对象只有一个。

map.png

map(.x, .f, …) .x: 列表或向量; .f: 映射函数; ...: 映射函数的其他参数

map2函数是map函数的变形,映射对象有两个,需要注意两个列表/向量的长度必须相同

map2.png

map2(.x,.y, .f, …) .x: 列表或向量; .y: 列表或向量,与.x等长; .f: 映射函数; ...: 映射函数的其他参数

pmap函数是map函数的变形,映射对象为多个,需要注意多个列表/向量的长度必须相同

pmap.png

pmap(.l, .f, …) .l: 列表向量/列表; .f: 映射函数; ...: 映射函数的其他参数

reduce函数表示规约,计算向量中相邻的两个元素,结果再与第三个元素计算,…,最后计算出一个值。 reduce.png

reduce(.x, .f, …) .x: 列表向量/列表; .f: 规约函数; ...: 函数的其他参数

reduce(1:5, sum)
# [1] 15 : 1+2+3+4+5

reduce2 #

reduce2函数可以同时对两个向量进行规约计算,注意第二个向量长度需要比第一个向量小1

reduce2(.x, .y,.f, …) .x: 列表向量/列表; .y: 列表向量/列表,长度比.x小1; .f: 规约函数; ...: 函数的其他参数

reduce2(x, y, f)中的x是要进行连续运算的数据列表或向量, 而y是给这些运算提供不同的参数。 如果没有.init初始值, f仅需调用length(x)-1次, 所以y仅需要有length(x)-1个元素; 如果有.init初始值, f需要调用length(x)次, y也需要与x等长。

reduce2(1:4, c(1,1,1), function(x,y,z) x+y-z)
# [1] 7

计算逻辑为第一次:1+2-1=2,第二次2+3-1=4,第三次4+4-1=7。

最后一次修改于 2021-03-26