mój stary kod wyglądał tak:Konwersja prosty kod ggplot2 używać data.table
library(ggplot2)
gp<-ggplot(NULL,aes(x=Income))
gp<-gp+geom_density(data=dat$Male,color="blue")
gp<-gp+geom_density(data=dat$Female,color="green")
gp<-gp+geom_density(data=dat$Alien,color="red")
plot(gp) #Works
Teraz zaczęła używać doskonałą data.table bibliotekę (zamiast data.frame):
library(data.table)
cols<-c("blue","green","red")
gp<-ggplot(NULL,aes(x=Income))
dat[, list(gp+geom_density(data=.SD, color=cols[.GRP])), by=Gender]
#I even tried
dat[, list(gp<-gp+geom_density(data=.SD, color=cols[.GRP])), by=Gender]
plot(gp) #Error: No layers in plot
Nie jestem do końca pewien, co jest nie tak, ale wydaje się, że kod, który wykonuję wewnątrz J(), nie jest rozpoznawany w zewnętrznym zakresie.
Jak mogę to osiągnąć w idiomatyczny sposób data.table?
Nie sądzę, że to będzie działać w ten sposób. Pamiętaj, że data.table ** to ** a data.frame i użyj swojego starego kodu. – Roland
@Roland, yes ofcourse Wciąż mogę używać mojego starego kodu. Ale to w pewien sposób zniszczy cel używania data.table. Poza tym chcę wykorzystać grupę przez zdolność datatable (tj. Dt [,, by = something]) zamiast używania split() – Kostolma