Ricordo un commento su r-help nel 2001 che diceva che drop = TRUE
in [.data.frame
era la peggiore decisione di progettazione nella cronologia R.Best practice per ottenere una colonna rilasciata in dplyr tbl_df
dplyr
corregge questo e non si abbassa implicitamente. Quando si tenta di convertire il vecchio codice in stile dplyr
, questo introduce alcuni bug sgradevoli quando si assume che d[, 1]
o d[1]
sia un vettore.
La mia soluzione corrente utilizza unlist
come illustrato di seguito per ottenere un vettore a 1 colonna. Qualche idea migliore?
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]])
perché non basta usare 'd1 [[1]]' – shadow
Funziona anche. Mi sono perso in [[]] spazio. Si prega di inviare come risposta come riferimento. Ho pubblicato questo riepilogo perché non sono riuscito a trovarlo su SO e nei documenti. Se qualcuno ha trovato un avvertimento nei documenti 'dplyr', per favore aggiungi il link qui. –