5
Ich möchte eine Funktion für alle Spalten in data.table anwenden. Daher benutze ich .SD mit lapply. Aber innerlich kann ich die Spalte meines Tisches nicht abrufen.Abrufen des Spaltennamens im Lapply mit .SD
Zum Beispiel
x = data.table(a=1:10, b=10:1, id=1:5)
x[,lapply(.SD,function(t){t*id}),.SDcols=c(1,2)]
Error in ..FUN(a) : object 'id' not found
ich wie folgt vorgehen:
x[,lapply(.SD,function(t){t*x$id}),.SDcols=c(1,2)]
können wir besser machen?
Dank! Gibt es eine Möglichkeit zu vermeiden, die Funktion auf die Spalte i anzuwenden? – Nicolas
@Nicolas bitte überprüfen Sie meine Bearbeitung. Kleiner Tipp, wenn Sie auf Geschwindigkeit achten, versuchen Sie immer, Ihrer Funktion die kompakteste Struktur zu geben, die Sie können (oft bedeutet es schneller Code). – Michele
Ich mag die erste der drei Alternativen, die Sie geben, obwohl die Verwendung von '.SD' redundant wird. Ich denke 'x [, lapply (liste (a, b),' * ', id)]' ist die beste Lösung, und es beinhaltet nichts mehr als die Verwendung von '.SDcols' an erster Stelle. –