引用变量的奇怪行为

时间:2015-02-01 12:01:40

标签: r dplyr

在引用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中使用的非标准评估有关。有什么想法吗?

由于

大卫

1 个答案:

答案 0 :(得分:0)

所以要关闭它,通过查看source code,似乎[.tbl_df(与[.data.frame不同) alsways 设置drop = FALSEdoesn't let you告诉它否则

所以当你这样做时

data[, "x"]

What actually happens

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