【发布时间】:2020-06-07 18:14:16
【问题描述】:
我需要将数组中的每个项目与矩阵中的每个元素进行比较。矩阵和数组可以是任意大小。我不能使用循环或if 语句——主要是apply()、ifelse() 等函数。 NA 数据可以忽略。这是一个例子:
x <- c(1,0,1,0,1,1,1,1,0,1,0,1)
y <- c(1, NA, 1, NA)
y 数组需要按行与 x 进行比较 - 以便在 y 中的每个元素与 x 进行比较之后,y 继续与 x 进行比较作为新行。我想要的解决方案是:
[,1] [,2] [,3] [,4]
[1,] TRUE NA TRUE NA
[2,] TRUE NA TRUE NA
[3,] FALSE NA FALSE NA
这个函数比较逻辑等价:
answer <- function(x,y){
z <- x == y
print(z)
}
解决方案返回正确答案,但在一行中,下一行应在第二个 NA 之后开始。
[1] TRUE NA TRUE NA TRUE NA TRUE NA FALSE NA FALSE NA
当我尝试将该答案转换为列长度 (y) - 在这种情况下为 4 的矩阵时 - 输出不正确。
answer <- function(x,y){
z <- x == y
z2 <- matrix(z, ncol = length(y))
print(z2)
}
返回是按列直接比较值:
[,1] [,2] [,3] [,4]
[1,] TRUE NA TRUE NA
[2,] NA TRUE NA FALSE
[3,] TRUE NA FALSE NA
我可以使用什么来通过一行中的每一列而不是一列中的每一行进行比较?我可以使用apply(z, 1, some built-in function) 或嵌套的apply(apply()) 函数吗?困难在于确保生成的矩阵大小正确,答案正确,同时补偿任何大小的数组/矩阵比较。
【问题讨论】: