gpt4 book ai didi

r - 将 rpois 和 rnbinom 与 dplyr 命令一起使用

转载 作者:行者123 更新时间:2023-12-05 02:27:27 24 4
gpt4 key购买 nike

我正在尝试在 tibble 中生成随机数,其中不同类别的项目分布不同。我运气不好。这是代码及其产生的错误:

library(dplyr)

letters <- tibble(letter = c(rep("A", 5), rep("B", 5), rep("C", 5) ))

letters %>%
rowwise() %>%
mutate(Proj = case_when(
letter == "A" ~ rpois(1, lambda = .7746),
letter == "B" ~ rnbinom(1, size = 3.3848, mu = 1.2),
letter == "C" ~ rpois(1, lambda = .5057)
))

#> Error in `mutate()`:
#> ! Problem while computing `Proj = case_when(...)`.
#> ℹ The error occurred in row 1.
#> Caused by error in `` names(message) <- `*vtmp*` ``:
#> ! 'names' attribute [1] must be the same length as the vector [0]

有趣的是,如果我使用连续分布而不是离散分布,代码就可以正常工作。

library(dplyr)

letters <- tibble(letter = c(rep("A", 5), rep("B", 5), rep("C", 5) ))

letters %>%
rowwise() %>%
mutate(Proj = case_when(
letter == "A" ~ rweibull(1, shape = 2.3487, scale = 8.174),
letter == "B" ~ rexp(1, rate = .0442),
letter == "C" ~ rnorm(1, mean = 0, sd = 1)
))

#> # A tibble: 15 × 2
#> # Rowwise:
#> letter Proj
#> <chr> <dbl>
#> 1 A 9.82
#> 2 A 7.72
#> 3 A 12.9
#> 4 A 7.81
#> 5 A 6.44
#> 6 B 10.4
#> 7 B 3.14
#> 8 B 1.48
#> 9 B 28.7
#> 10 B 11.0
#> 11 C -0.378
#> 12 C -0.340
#> 13 C 1.81
#> 14 C 1.03
#> 15 C -0.679

reprex package 创建于 2022-07-29 (v2.0.1)

这是怎么回事?

最佳答案

rpois 返回一个整数。 rnbinom 返回一个 double 值。 case_when 的文档说:

      The LHS must evaluate to a logical vector. The RHS does not
need to be logical, but all RHSs must evaluate to the same
type of vector.

这就是导致问题的原因。将 rnbinom 的输出显式转换为整数或将 rpois 的输出显式转换为数字。

关于r - 将 rpois 和 rnbinom 与 dplyr 命令一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73169693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com