与 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。
考虑这个例子
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。