Ho provato ad associare la mia classe a numeric
, per modificare l'output format
. Funziona bene, ma dopo che faccio un gruppo by
la classe ritorna al valore numerico.Perché data.table perde la definizione della classe in .SD dopo il gruppo per?
Esempio: Definire una nuova funzione di formattazione per la mia classe:
format.myclass <- function(x, ...){
paste("!!", x, "!!", sep = "")
}
poi fare una piccola data.table
e cambiare una delle colonne per MyClass:
> DT <- data.table(L = rep(letters[1:3],3), N = 1:9)
> setattr(DT$N, "class", "myclass")
> DT
L N
1: a !!1!!
2: b !!2!!
3: c !!3!!
4: a !!4!!
5: b !!5!!
6: c !!6!!
7: a !!7!!
8: b !!8!!
9: c !!9!!
Ora eseguire un gruppo e la colonna N ritorna a intero:
> DT[, .SD, by = L]
L N
1: a 1
2: a 4
3: a 7
4: b 2
5: b 5
6: b 8
7: c 3
8: c 6
9: c 9
> DT[, sapply(.SD, class), by = L]
L V1
1: a integer
2: b integer
3: c integer
Qualche idea del perché?
+1 per "culo". E un'ottima risposta – Corone
+1. Avrei giurato '.SD' attributi di colonne mantenute ma chiaramente no. Lo risolverà, a meno che non ci sia un rovescio della medaglia? (So che non ci sarà alcun aspetto negativo delle prestazioni, quindi intendo diversamente). –
Non so davvero perché questo non è il comportamento predefinito. Oppure quante copie di "[.Date" si trovano su CRAN con diversi alias. La vera soluzione sarebbe quella di sottoclasse da "Date" e ottenere gratuitamente quella funzione di sottoinsieme :) j/k – Spacedman