[英]Two equivalent commands give different returns in r
为什么以下两条命令返回的不是相同的 output?
x <- sample(0:1, 50, replace = TRUE, prob = c(0.5, 0.5))
sum(x==1)
sample(0:1, 50, replace = TRUE, prob = c(0.5, 0.5)) %>%
sum(.==1)
第 2 个命令中的第一个总是给我正确的答案(大约 25),第二个命令返回一个像 52 这样太高的数字。我在这里对 pipe 运算符有什么误解?
只需用{}
包装它
sample(0:1, 50, replace = TRUE, prob = c(0.5, 0.5)) %>%
{sum(.==1)}
问题是.==1
被视为第二个参数。 如果我们这样做可以匹配
sum(x, x == 1)
在我们做sample
时,请确保同时指定set.seed
set.seed(24)
x <- sample(0:1, 50, replace = TRUE, prob = c(0.5, 0.5))
sum(x==1)
set.seed(24)
sample(0:1, 50, replace = TRUE, prob = c(0.5, 0.5)) %>%
{sum(.==1)}
您也可以使用 lambda function 来避免错误:
set.seed(24)
sample(0:1, 50, replace = TRUE, prob = c(0.5, 0.5)) |>
(\(x) sum(x))()
另一种方法可能是将您的逻辑操作移至 sample() function
sample(c(0:1) == TRUE,
size = 50,
replace = TRUE,
prob = c(0.5, 0.5)) %>%
sum
您确实会问为什么-总和 function 将汇总它收到的所有值,但只是第一个向量,当您使用管道时,它将最后一步的 output 带到 sum() 中的第一个参数,所以您实际上是在说sum(x, x==1)
。 例如,您可以使用sum(4, 6, 7, 9)
(这是四个独立的向量)或在您的代码中看到这一点:
set.seed(1)
x <- sample(0:1,
size = 50,
replace = TRUE,
prob = c(0.5, 0.5))
sum(x, x==1)
set.seed(1)
sample(0:1,
size = 50,
replace = TRUE,
prob = c(0.5, 0.5)) %>%
sum(x==1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.