文章目录
介绍
R语言中的Reduce(), Filter(), Find(), Map(), Negate(), Position()是base包中的一些高级函数。随后,很多包也给这些函数提供了更多的扩展。
Reduce()
该函数根据一个二元函数实现累计计算。
r
Reduce(f, x, init, right = FALSE, accumulate = FALSE)
- f:一个二元函数
- x: 一个向量或者列表
- init: 初始值
- right: 逻辑值, T表示从右到左,F表示从左到右
- accumulate: 逻辑值, T表示显示每一步的结果,F表示只显示最后一步的结果
实例
r
f=function(x,y){x+y}
x=list(1,2,3,4)
Reduce(f,x,init = 0,accumulate = T)
# [1] 0 1 3 6 10
Reduce(f,x,init = 1,accumulate = T)
# [1] 1 2 4 7 11
Filter()
r
Filter(f, x)
- f:一个返回逻辑值的一元函数
- x: 一个向量或者列表
实例
r
f=function(x){ is.character(x)}
x=list(1,'2',3,'4')
Filter(f,x)
# [[1]]
# [1] "2"
#
# [[2]]
# [1] "4"
x <- c(3, 8, 2, 6, 4, 9, 7)
Filter(function(num) { num > 5 }, x)
# [1] 8 6 9 7
Find()
返回满足要求的元素,只返回第一个。
r
Find(f, x, right = FALSE, nomatch = NULL)
- f:一个返回逻辑值的一元函数
- x: 一个向量或者列表
- right: 逻辑值, T表示从左到右,F表示从右到左
- nomatch: 找不到目标值的返回值
实例
r
f=function(x){ is.character(x)}
x=list(1,'2',3,'4')
Find(f,x,right = T, nomatch = 'no finding')
# [1] "4"
Find(f,x,right = F, nomatch = 'no finding')
# [1] "2"
Find(f,x=c(1,2,3),right = F, nomatch = 'no finding')
# [1] "no finding"
Map()
r
Map(f,x)
- f:一个k元函数
- x: 一个向量或者列表
实例
r
f=function(x){x^2}
Map(f,x=c(1,2,4,5))
# [[1]]
# [1] 1
#
# [[2]]
# [1] 4
#
# [[3]]
# [1] 16
#
# [[4]]
# [1] 25
f=function(x){sum(x)}
l=list(c(1,2),c(5,6),c(4,8))
Map(f,x=l)
# [[1]]
# [1] 3
#
# [[2]]
# [1] 11
#
# [[3]]
# [1] 12
Negate()
r
Negate(f)
该函数用于返回一个与f相反的一个函数,T变F,F变T.
实例
r
f=function(x){x>3}
f2=Negate(f)
x=c(1,2,3,4,5,6)
f(x)
# [1] FALSE FALSE FALSE TRUE TRUE TRUE
f2(x)
# [1] TRUE TRUE TRUE FALSE FALSE FALSE
Position()
该函数用于返回满足条件的元素索引,只返回第一个。
r
Position(f, x, right = FALSE, nomatch = NA_integer_)
- f:一个返回逻辑值的一元函数
- x: 一个向量或者列表
- right: 逻辑值, T表示从左到右,F表示从右到左
- nomatch: 找不到目标值的返回值
实例
r
f=function(x){x>3}
x=c(1,2,3,4,5,6)
Position(f,x)
# [1] 4
Position(f,x,right = T)
# [1] 6