Pamiętam komentarz na temat r-help z 2001 roku, który stwierdził, że drop = TRUE
w [.data.frame
była najgorszą decyzją projektową w historii R.Najlepsza praktyka, aby uzyskać upuszczoną kolumnę w dplyr tbl_df
dplyr
to koryguje i nie zrzuca automatycznie. Podczas próby przekonwertowania starego kodu na styl dplyr
wprowadza to pewne nieprzyjemne błędy, gdy przyjmuje się, że d[, 1]
lub d[1]
jest wektorem.
Moje bieżące obejście używa unlist
, jak pokazano poniżej, aby uzyskać wektor z jedną kolumną. Jakieś lepsze pomysły?
library(dplyr)
d2 = data.frame(x = 1:5, y = (1:5)^2)
str(d2[,1]) # implicit drop = TRUE
# int [1:5] 1 2 3 4 5
str(d2[,1, drop = FALSE])
# data.frame': 5 obs. of 1 variable:
# $ x: int 1 2 3 4 5
# With dplyr functions
d1 = data_frame(x = 1:5, y = x^2)
str(d1[,1])
# Classes ‘tbl_df’ and 'data.frame': 5 obs. of 1 variable:
# $ x: int 1 2 3 4 5
str(unlist(d1[,1]))
# This ugly construct gives the same as str(d2[,1])
str(d1[,1][[1]])
Dlaczego nie wystarczy użyć 'd1 [[1]]' – shadow
Działa również. Zgubiłem się w przestrzeni [[]]. Opublikuj jako odpowiedź jako odniesienie. Opublikowalem to podsumowanie, poniewaz nie moglem go znalezc na SO i w dokumentach. Jeśli ktoś znalazł zastrzeżenie w dokumentach "dplyr", dodaj link tutaj. –