R& sum(...)函数中&符运算符的行为是什么

时间:2016-09-22 12:27:27

标签: r

下面是我从R转换为Python的脚本中的一行。我在Python方面的经验比在R方面更有经验,我在这里遇到了一些麻烦:

val = sum(l & f==v)

l成为真/假值的向量。让f成为琐碎值的向量,v可以测试f的一些可能值。我希望lf的长度相同。 f==v部分也将产生一个布尔数组。现在我的问题是& /&符号(逻辑AND,根据R documentation)在这种情况下会做什么。 sum()函数是否会返回一个布尔数组的总和,该数组指示lf==v布尔数组的真实位置?或者它将两个数组的所有真值相加并加起来?

提前谢谢!

2 个答案:

答案 0 :(得分:3)

让我们定义几个向量:

l <- c(TRUE, FALSE, TRUE, FALSE, TRUE)
v <- 1:5
f <- rep(c(1, 4), c(3, 2))

现在让我们看看我们在分解您的行sum(l & f==v)时所拥有的内容:
在此行中,==优先于&

fev <- f==v
fev
[1]  TRUE FALSE FALSE  TRUE FALSE

然后我们l & fev

lafev <- l & fev
[1]  TRUE FALSE FALSE FALSE FALSE

最后,我们总结:

sum(lafev)
[1] 1

总和通过将TRUE值转换为数字l变为{{1},告诉我们在f==vlogical中同时有多少TRUE 1 }}和FALSE变为0。所以,在这个例子中,1。

答案 1 :(得分:0)

以下是python版本示例:

l = [True, True, False]
f = [True, False, True]
v = [True, True, True]
f_eq_v = [f[i] == v[i] for i in range(len(f))] # f == v in R
val = sum([l[i] & f_eq_v[i] for i in range(len(l))]) # val = sum(l & f==v) in R