给出以下长度为n=10
的向量:
# [1] 0 0 0 0 0 1 0 0 1 0
vec <- c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L)
假设我们要将运算符&
应用于向量元素的所有可能组合。那就是:
res <- combn(n, 2, function(v) vec[v[1]]&vec[v[2]])
# total number of possible combinations is n(n-1)/2 = 45
但是,我们知道&
运算符的结果只有在两个值均为1
时才为真,因此我们可以更聪明地完成它。实际上,combn
的结果是长度为45
的向量,只有一个1
值,其余只有0
。
现在的问题是,如何在不应用1
本身的情况下提取唯一combn
的位置?一旦我们得到它,我们生成的结果如下:
res <- rep(0, 45)
res[index] <- 1
其中index
是质疑的位置。
答案 0 :(得分:0)
这个怎么样(假设向量中只有两个位置为1,其余为零):
vec <- c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L)
n <- length(vec)
pos <- which(vec==1)
index = ifelse(pos[1]==1, 0, sum((n-1):(n-pos[1]+1))) + (pos[2] - pos[1])
index
#[1] 38
res <- combn(n, 2, function(v) vec[v[1]]&vec[v[2]])
which(res==TRUE)
#[1] 38