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

Tje*_*ebo 4 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))
Run Code Online (Sandbox Code Playgroud)

现在:

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
Run Code Online (Sandbox Code Playgroud)

但是当然

df$tp <- c(1:42) #works
Run Code Online (Sandbox Code Playgroud)

我的变异代码是错误的还是回收根本不起作用mutate()?如果它有帮助,我使用dplyr0.7.2与RStudio 1.0.153(Mac)

Ben*_*ker 5

你问了两个不同的问题:

  • (标题)"dplyr :: mutate()不回收载体吗?"

答:没有(你发现了).该dplyr小插曲清楚地表明,回收仅适用于长度为1的向量:

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

  • 为什么?

答:如果不问dplyr开发商,可能无法回答.我推测他们在方便(一方面)和要求R的原始开发者(他们甚至允许不完全回收,尽管有警告)的明确的用户意图陈述之间做出了不同的结论.).

  • 我怀疑使用数据库后端实现回收的困难也可能导致了这一决定。 (2认同)