如何矢量化模数?

问题描述 投票:2回答:1

R中,我有一个带整数的向量,对于多个值,它应被检查为可以整除而没有余数。

v <- c(3, 4, 10, 11, 12)
v %% 4 == 0 | v %% 10 == 0 #... this might include 100 checks or more

我正在寻找这个(如v %% c(4, 10))的矢量化,它可能会返回一个矩阵或类似的东西。


我编写了一个可以执行此操作的函数,但我想知道是否已经存在这样一个我可以重用的函数,而不是再次“重新发明”它。

`%V%`  <- function(x, y){
  ret <- matrix(nrow = length(x), ncol = length(y))
  for(i in 1:ncol(ret)){
    ret[, i] <- x %% y[i]
  }
  return(ret)
}
v %V% c(4, 10)

为了我最初的目的,我现在将运行apply(v %V% c(4, 10), 1, function(x) any(x == 0))或相应地更改我的功能。

r vectorization modulo
1个回答
3
投票

你可以使用outer函数来实现你想要的:

outer(v, c(4,10), '%%') == 0

这使:

      [,1]  [,2]
[1,] FALSE FALSE
[2,]  TRUE FALSE
[3,] FALSE  TRUE
[4,] FALSE FALSE
[5,]  TRUE FALSE
© www.soinside.com 2019 - 2024. All rights reserved.