下面是我从R转换为Python的脚本中的一行。我在Python方面的经验比在R方面更有经验,我在这里遇到了一些麻烦:
val = sum(l & f==v)
让l
成为真/假值的向量。让f
成为琐碎值的向量,v
可以测试f
的一些可能值。我希望l
和f
的长度相同。 f==v
部分也将产生一个布尔数组。现在我的问题是&
/&符号(逻辑AND,根据R documentation)在这种情况下会做什么。 sum()
函数是否会返回一个布尔数组的总和,该数组指示l
和f==v
布尔数组的真实位置?或者它将两个数组的所有真值相加并加起来?
提前谢谢!
答案 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==v
和logical
中同时有多少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