R:使用all()保持函数向量化

wztqucjr  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(145)

我有一个函数fun,它检查a, b的多个条件,如果所有条件都满足,函数应该返回TRUE,否则应该返回FALSE

a = 1
b = 0

fun <- function(a, b){
  all(a < 1,
      b < 1,
      na.rm = TRUE)
}

fun(a, b)

这个函数很有用,但是,如果我现在使用向量,all()当然不会保持向量的形式,而是返回一个TRUEFALSE
我希望有一个功能,工作原理与以下一个相同:

a = 1:2
b = 0:1

funV <- function(a, b){
  a < 1 & b < 1
}

funV(a, b)

但是没有链接&,并且它还应当对缺失值起作用。

ikfrs5lh

ikfrs5lh1#

pmin + as.logical =矢量化的all()

fun <- function(a, b){
  as.logical(pmin(a < 1, b < 1, na.rm = TRUE))
}

fun(1:2, 0:1)
# [1] FALSE FALSE
基准测试

x一个一个一个一个x一个一个二个x

4c8rllxm

4c8rllxm2#

我们可以使用Vectorize()来创建一个矢量化函数。Vectorize()在幕后使用mapply()

fun <- function(a,b){
  all(a < 1,
      b < 1,
      na.rm = TRUE)
}

a = 1:2
b = 0:1

funV <- Vectorize(fun)

funV(a,b)
#> [1] FALSE FALSE

reprex package(v2.0.1)于2023年2月14日创建

laawzig2

laawzig23#

使用mapply

fun <- function(a,b){
  mapply(\(x, y) all(x < 1, y < 1, na.rm = TRUE), a, b)
}

fun(1:2, 0:1)
#[1] FALSE FALSE

相关问题