如何向量化模数?
How to vectorize modulo?
在 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)
)的矢量化,它可能 return 矩阵或类似的东西。
我编写了一个可以执行此操作的函数,但我想知道是否已经存在这样一个函数,我可以重复使用它而不是再次 "reinventing" 它。
`%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))
或相应地更改我的功能。
您可以使用outer
-函数来实现您想要的:
outer(v, c(4,10), '%%') == 0
给出:
[,1] [,2]
[1,] FALSE FALSE
[2,] TRUE FALSE
[3,] FALSE TRUE
[4,] FALSE FALSE
[5,] TRUE FALSE
在 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)
)的矢量化,它可能 return 矩阵或类似的东西。
我编写了一个可以执行此操作的函数,但我想知道是否已经存在这样一个函数,我可以重复使用它而不是再次 "reinventing" 它。
`%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))
或相应地更改我的功能。
您可以使用outer
-函数来实现您想要的:
outer(v, c(4,10), '%%') == 0
给出:
[,1] [,2] [1,] FALSE FALSE [2,] TRUE FALSE [3,] FALSE TRUE [4,] FALSE FALSE [5,] TRUE FALSE