我有一种情况,我希望根据向量中每个位置的TRUE / FALSE组合检测两个逻辑命名向量之间的条件。例如:
x <- c(TRUE, FALSE, FALSE, TRUE)
names(x) <- c("a", "b", "c", "d")
y <- c(TRUE, TRUE, FALSE, FALSE)
names(y) <- names(x)
对于这两个向量中的每个元素,我想检测3个条件:
x[i]
为TRUE
,y[i]
为TRUE
; x[i]
为FALSE
,y[i]
为TRUE
,x[i]
为TRUE
,y[i]
为FALSE
。 x
和y
的长度相同,但可能比此示例更长。我想检索每个条件的元素名称,并将元素名称分配给新变量。对于这个例子:
v1 <- "a"
v2 <- "b"
v3 <- "d"
在这两个向量的较长版本中,我可能会得到类似的结果:
v1 <- c("a", "e")
v2 <- c("b", "f", "g")
v3 <- c("d", "i", "k", "l")
执行此操作的最佳矢量化方法是什么。我认为这很简单,但我无法得出答案。提前谢谢。
答案 0 :(得分:3)
我们可以有效地使用Dim intScore As Integer
Dim intNumOutput1 As Integer
Dim intNumOutput2 As Integer
Dim intBothOutputs As Integer
Dim intNumInput As Integer
' The rest of your code
Private Sub Form_Load()
End Sub
Private Sub cmdRollDice_Click()
End Sub
'
'
,但在此之前,我们需要一个分组索引。这是一种可能性:
split
要了解上述分组索引,请考虑以下事项:
g <- x + y + x
split(names(x), g)
因此,您可以看到x <- c(TRUE, TRUE, FALSE, FALSE)
y <- c(TRUE, FALSE, TRUE, FALSE)
x + y + x
#[1] 3 2 1 0
和TRUE
的4种组合被映射到4个整数值。
啊,所以“a”被分配给
FALSE
,“b”分配给T-T
等等。但是,为什么T-F
?我没有按两次添加x + y + x
。
如果您只x
,结果只有0,1和2.您将无法区分x + y
和T-F
,因为它们都是1。
@thelatemail提供了一种更易读的方式:
F-T
<强>更新强>
啊......愚蠢的我......为什么我要打扰split(names(x), interaction(x, y, drop=TRUE))
。我突然想起我们可以将列表传递给g
中的f
参数:
split
注意,在split(names(x), list(x, y))
内部:
split.default