2016-03-22 8 views
1

Betrachten Sie dieses Beispielunerwartetes Verhalten mit grep und dplyr TBL im Vergleich zu 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"]) 

Die ersten drei grepl Befehle geben [1] TRUE TRUE TRUE TRUE TRUE. Der letzte nur [1] TRUE.

Ich würde erwarten, dass es das gleiche sein wird. Was ist die Absicht? Und wie kann die letzte Aussage auch einen Vektor zurückgeben?

+1

'simple_dat_tbl $ let' ist äquivalent zu' unname (unlist (simple_dat_tbl [, "let"])) ' – RHertel

Antwort

1

Das ist eine Funktion von dplyr. Wenn Sie die data_frame Subset zu einer Spalte zu erhalten, vereinfacht es nicht die Ausgabe an einen Vektor, die Standardverhalten mit data.frame s ist. Siehe:

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

Sie [[]] verwenden können, wenn Sie es wünschen, einen Vektor zurück. Siehe:

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

Weitere Informationen finden Sie unter this vignette.