繁体   English   中英

两个等效命令在 r 中给出不同的返回

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM