0

给定以下长度向量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

但是,我们知道&operator 的结果只有在两个值都为真时才为真1,因此我们可以用更聪明的方式来做。实际上, 的结果combn是一个长度为的向量,45只有一个 的值,1其余的只是0

现在的问题是,我们如何在1不应用combn自身的情况下提取唯一的位置?一旦我们得到它,我们就可以简单地生成结果如下:

res <- rep(0, 45)
res[index] <- 1

index质疑的立场在哪里。

4

1 回答 1

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
于 2016-09-15T09:26:46.757 回答