Vielen Dank im Voraus für das Lesen dieser. Ich habe eine Funktion, die bei data gut funktionierte.Tabelle 1.9.3. Aber heute habe ich mein data.table-Paket aktualisiert und meine Funktion funktioniert nicht.data.table Berechnung mehrere Spalte auf einmal
Hier ist meine Funktion und Arbeitsbeispiel auf data.table 1.9.3:
trait.by <- function(data,traits="",cross.by){
traits = intersect(traits,names(data))
if(length(traits)<1){
#if there is no intersect between names and traits
return( data[, list(N. = .N), by=cross.by])
}else{
return(data[,c( N. = .N,
MEAN = lapply(.SD,function(x){return(round(mean(x,na.rm=T),digits=1))}) ,
SD = lapply(.SD,function(x){return(round(sd (x,na.rm=T),digits=2))}) ,
'NA' = lapply(.SD,function(x){return(sum (is.na(x)))})),
by=cross.by, .SDcols = traits])
}
}
> trait.by(data.table(iris),traits = c("Sepal.Length", "Sepal.Width"),cross.by="Species")
# Species N. MEAN.Sepal.Length MEAN.Sepal.Width SD.Sepal.Length
#1: setosa 50 5.0 3.4 0.35
#2: versicolor 50 5.9 2.8 0.52
#3: virginica 50 6.6 3.0 0.64
# SD.Sepal.Width NA.Sepal.Length NA.Sepal.Width
#1: 0.38 0 0
#2: 0.31 0 0
#3: 0.32 0 0
Der Punkt ist MEAN.(traits)
, SD.(traits)
und NA.(traits)
für alle Spalten berechnet, die ich in traits
Variable geben.
Als ich betreibe diese mit data.table 1.9.4 ich die folgende Fehlermeldung:
> trait.by(data.table(iris),traits = c("Sepal.Length", "Sepal.Width"),cross.by="Species")
#Error in assign("..FUN", eval(fun, SDenv, SDenv), SDenv) :
# cannot change value of locked binding for '..FUN'
Jede Idee, wie ich dieses Problem beheben sollte ?!
Melden Sie es auf der [data.table issues webpage] (https://github.com/Rdatatable/data.table/issues) – pak