R中的case_when()返回比预期更长的向量

41ik7eoe  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(119)

当计算的条件长度仅为1时,为什么case when返回更大长度的向量?
这里使用的是dplyr::case_when()。
下面是我的例子:

g <- list("something", c(1:10))

case_when( g[[1]] == "not something" ~ sum(g[[2]]), 
           g[[1]] == "something" ~ g[[2]][3], 
           TRUE ~ g[[2]]
)

我本以为结果是3而不是

3 3 3 3 3 3 3 3 3 3 3

编辑:回顾函数的文档,也许上面的函数应该返回一个错误而不是运行?

    • 价值**

长度为1或n的向量,与逻辑输入或输出向量的长度相匹配,并具有第一个RHS的类型(和属性)。长度或类型不一致将产生错误。

ozxc1zmp

ozxc1zmp1#

您的问题来自最后一个返回向量的条件TRUE ~ g[[2]]。其他条件返回单个值,这会使case_when混淆。
您可以通过将输出统一到列表来实现您想要的结果。

case_when( g[[1]] == "not something" ~ list(sum(g[[2]])), 
       g[[1]] == "something" ~ list(g[[2]][3]), 
       TRUE ~ g[2]
)

相关问题