另一种方法是将逻辑操作移至 sample() 函数
sample(c(0:1) == TRUE,
size = 50,
replace = TRUE,
prob = c(0.5, 0.5)) %>%
sum
您确实会问为什么 - sum 函数将对它接收到的所有值求和,而不仅仅是第一个向量。当您进行管道传输时,它会将最后一步的输出带到sum(...) 中的第一个参数,因此通过还提供x==1,您提供了两个向量,实质上是sum(x, x==1)。例如,您可以使用sum(c(1,1,1), c(1,1,1))(返回六个,将两个向量中的所有值相加)或在您的代码中看到这一点:
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)
此外,如果x <- c(1, 0, 1, 0, 1, 1),那么sum(x, x==1) 或x %>% sum(x==1) 是有效的
sum(c(1, 0, 1, 0, 1, 1), as.numeric(c(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE)))