1

我在 R 中有一个向量,比如 c(2, 2, 3, 2, 3, 4, 4),我想构建一个大小为 n(向量的元素数)的方阵,如果向量的元素 i 与元素 j 具有相同的值,否则为 0。在此示例中,矩阵的元素 [1,2] 和 [1,4] 必须为 1,因为向量的第一个、第二个和第四个元素相同。有没有办法做到这一点 ?要构建的命令或函数?有组合的东西?我想避免像 for 这样的循环。

谢谢 !

4

2 回答 2

4

我刚想到这……这就是你想要的吗?

a <- c(2, 2, 3, 2, 3, 4, 4)
mat <- a%*%t(a)

apply(mat, 2, function(x){as.integer((x/a)==a)})
于 2018-01-04T06:25:21.923 回答
3

我们可以通过将 的每个元素与其他元素outer进行比较来创建方阵vector

+(outer(v1, v1, `==`))

或使用sapply

+(sapply(v1, `==`, v1))
于 2018-01-04T06:20:22.567 回答