首页 文章

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

提问于
浏览
0

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

val = sum(l & f==v)

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

先感谢您!

2 回答

  • 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
    

    总和通过将 logical 值转换为数字来告诉我们在 lf==v 中同时存在多少 TRUETRUE 变为 1FALSE 变为 0 . 所以,在这个例子中,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
    

相关问题