为什么 `a` 和 `b` 不使用 R 中的 `mapply` 生成同一组数字?
Why `a` and `b` don't generate the same set of numbers using `mapply` in R?
我想知道为什么 a
和 b
不生成以下相同的一组数字:
N = 60 ; df = N-1 ; d = 3 ; ncp = d*sqrt(N)
a = mapply(c, as.list(14: d*sqrt(N)+5), as.list(-14: -d*sqrt(N)+5), SIMPLIFY = FALSE)
b = mapply(c, as.list(14: ncp+5), as.list(-14: -ncp+5), SIMPLIFY = FALSE)
换句话说,我问的是为什么 as.list(-14: -d*sqrt(N)+5)
与 as.list(-14: -ncp+5)
的读法不同,而 ncp = d*sqrt(N)
?
它们不会生成相同的数字,因为它们因运算顺序不同而不同。让我们看看组件:
在 a
你有:
as.list(-14: -d*sqrt(N)+5)
而在 b
你有:
as.list(-14: -ncp+5)
这些不一样。让我们看看:
identical(as.list(-14: -ncp+5), as.list(-14: -d*sqrt(N)+5))
[1] FALSE
将此视为对操作顺序(优先级)的混淆。
您认为 :
右侧的所有内容在这两种情况下的计算结果相同。因此,您认为在这两种情况下,冒号的右侧都是 -18.2379。但不是!
他们没有在学校教你 :
如何影响评估。事实上,
-d*sqrt(N)+5
未计算为 -ncp+5
。被评估为:
(14:-d*sqrt(N))+5
或者,等价地:
(14:-d)*sqrt(N)+5
同样,等价于:
(14:-d)*(sqrt(N)+5)
你看出区别了吗? :
排在第一位。 +5
和 14:-d
之后的其他操作在 -d*sqrt(N)
之后。它被添加到来自 :
的序列中。
证明:
identical((14:-d)*sqrt(N)+5, 14:-d*sqrt(N)+5)
[1] TRUE
identical((14:-d*sqrt(N))+5, 14:-d*sqrt(N)+5)
[1] TRUE
这其实是个很好的问题。当你学习运算顺序时,他们不会在学校教 :
!
隐藏在这里是一个优先级问题。 :
的优先级高于 *
:
> 1:2*3
[1] 3 6
> 1:6
[1] 1 2 3 4 5 6
我想知道为什么 a
和 b
不生成以下相同的一组数字:
N = 60 ; df = N-1 ; d = 3 ; ncp = d*sqrt(N)
a = mapply(c, as.list(14: d*sqrt(N)+5), as.list(-14: -d*sqrt(N)+5), SIMPLIFY = FALSE)
b = mapply(c, as.list(14: ncp+5), as.list(-14: -ncp+5), SIMPLIFY = FALSE)
换句话说,我问的是为什么 as.list(-14: -d*sqrt(N)+5)
与 as.list(-14: -ncp+5)
的读法不同,而 ncp = d*sqrt(N)
?
它们不会生成相同的数字,因为它们因运算顺序不同而不同。让我们看看组件:
在 a
你有:
as.list(-14: -d*sqrt(N)+5)
而在 b
你有:
as.list(-14: -ncp+5)
这些不一样。让我们看看:
identical(as.list(-14: -ncp+5), as.list(-14: -d*sqrt(N)+5))
[1] FALSE
将此视为对操作顺序(优先级)的混淆。
您认为 :
右侧的所有内容在这两种情况下的计算结果相同。因此,您认为在这两种情况下,冒号的右侧都是 -18.2379。但不是!
他们没有在学校教你 :
如何影响评估。事实上,
-d*sqrt(N)+5
未计算为 -ncp+5
。被评估为:
(14:-d*sqrt(N))+5
或者,等价地:
(14:-d)*sqrt(N)+5
同样,等价于:
(14:-d)*(sqrt(N)+5)
你看出区别了吗? :
排在第一位。 +5
和 14:-d
之后的其他操作在 -d*sqrt(N)
之后。它被添加到来自 :
的序列中。
证明:
identical((14:-d)*sqrt(N)+5, 14:-d*sqrt(N)+5)
[1] TRUE
identical((14:-d*sqrt(N))+5, 14:-d*sqrt(N)+5)
[1] TRUE
这其实是个很好的问题。当你学习运算顺序时,他们不会在学校教 :
!
隐藏在这里是一个优先级问题。 :
的优先级高于 *
:
> 1:2*3
[1] 3 6
> 1:6
[1] 1 2 3 4 5 6