dplyr :: mutate()不回收载体吗?

时间:2018-01-15 23:16:59

标签: r dplyr mutate

似乎创建一个dplyr::mutate()的列不允许向量回收。为什么?

示例:

require(dplyr)
df <- data_frame(id = rep(1:5, each = 42), name = rep(letters[1:7], each = 6, times = 5))

现在:

df %>% mutate (tp = c(1:42))  #results in 

Error in mutate_impl(.data, dots) : 
  Column `tp` must be length 210 (the number of rows) or one, not 42

但当然

df$tp <- c(1:42) #works

我的变异代码是错误的还是回收根本无法在mutate()中起作用? 如果它有帮助,我使用dplyr 0.7.2与RStudio 1.0.153(Mac)

1 个答案:

答案 0 :(得分:5)

你问了两个不同的问题:

  • (标题)“dplyr :: mutate()不回收载体吗?”
<答>答:不(你发现了)。 dplyr vignette表明回收仅适用于长度为1的向量:

  

它们[mutate()]中使用的向量值必须是长度1(然后才能被回收)或者与行数具有相同的长度。

  • 为什么?

答:如果不问dplyr开发人员,可能无法回答。我推测他们在方便(一方面)和要求R的原始开发者(他们甚至允许不完整的回收,虽然有警告)。