以下代码段:
library(dplyr)
df = data.frame(col1=rep(1:5, c(3,3,2,1,1)))
df <- df %>%
mutate(rle=sequence(rle(col1)$lengths))
失败
eval中的错误(expr,envir,enclos):无效的下标类型'closure'
使用dplyr 0.5.0
时。这似乎是对参数dplyr::mutate
的非标准评估的限制,因为
df$rle <- with(df, sequence(rle(col1)$lengths))
按预期工作(with
也使用NSE,表达式也有$
)产生:
col1 rle
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
4 1
5 1
任何人都可以解释为什么dplyr::mutate
内不允许第一个构造?
我知道问题是$lengths
,因为mutate(rle=sequence(rle(col1)[["lengths"]])
有效。从上面看,似乎$name
符号不起作用,但[["name"]]
没问题。
任何人都可以解释如何在dplyr::mutate
内转换表达式以产生错误吗?