在引用tbl中的变量时,我看到了一些使用dplyr的奇怪行为。也许我需要以不同的方式处理它,或者这可能是一个错误。也许你可以帮助我!
这有效:
data <- data.frame(x = 1:10)
data <- as.tbl(data)
cut(data$x, breaks = 2)
[1] (0.991,5.5] (0.991,5.5] (0.991,5.5] (0.991,5.5] (0.991,5.5] (5.5,10]
[7] (5.5,10] (5.5,10] (5.5,10] (5.5,10]
Levels: (0.991,5.5] (5.5,10]
这不是:
cut(data[, "x"], breaks = 2)
Error in cut.default(data[, "x"], breaks = 2) : 'x' must be numeric
这可能与dplyr中使用的非标准评估有关。有什么想法吗?
由于
大卫
答案 0 :(得分:0)
所以要关闭它,通过查看source code,似乎[.tbl_df
(与[.data.frame
不同) alsways 设置drop = FALSE
和doesn't let you告诉它否则
所以当你这样做时
data[, "x"]
result <- .subset(data, "x")
class(result) <- c("tbl_df", "data.frame")
attr(result, "row.names") <- .set_row_names(nrow(data))
result
你真正想要的是
.subset(data, "x")[[1]]
(如果lnegth(j) == 1L
)
正如评论中所述,这已经在讨论here