与 data.frame 相比,grep 和 dplyr tbl 的意外行为

Unexpected behaviour with grep and dplyr tbl compared to data.frame

考虑这个例子

library(dplyr)

simple_dat_df <- data.frame(num = 1:5, let = letters[1:5], stringsAsFactors = FALSE)

grepl("[a-z]", simple_dat_df$let)
grepl("[a-z]", simple_dat_df[,"let"])

simple_dat_tbl <- data_frame(num = 1:5, let = letters[1:5])

grepl("[a-z]", simple_dat_tbl$let)
grepl("[a-z]", simple_dat_tbl[,"let"])

前三个grepl命令return[1] TRUE TRUE TRUE TRUE TRUE。最后一个而已[1] TRUE.

我希望它是一样的。意图何在?最后一条语句怎么也可以 return 一个向量?

这是dplyr的一个特点。如果将 data_frame 子集化以获得一列,它不会将输出简化为向量,这是 data.frame 的标准行为。参见:

class(simple_dat_tbl$let)
[1] "character"
class(simple_dat_tbl[,"let"])
[1] "tbl_df"     "data.frame"

如果你想return一个向量,你可以使用[[]]。参见:

class(simple_dat_tbl[["let"]])
[1] "character"

有关详细信息,请参阅 this vignette