Ich möchte in der Lage sein, eine Funktion zu schreiben, die Regressionen in einem data.table
von Gruppen ausgeführt und dann organisiert die Ergebnisse. Hier ist ein Beispiel dessen, was Ich mag würde tun:Übergabe von Spaltennamen an data.table programmgesteuert
require(data.table)
dtb = data.table(y=1:10, x=10:1, z=sample(1:10), weights=1:10, thedate=1:2)
models = c("y ~ x", "y ~ z")
res = lapply(models, function(f) {dtb[,as.list(coef(lm(f, weights=weights, data=.SD))),by=thedate]})
#do more stuff with res
Ich mag würde dies alles in eine Funktion wickeln, da die #doe more stuff
lang sein kann. Das Problem, dem ich gegenüberstehe, ist, wie man die verschiedenen Namen der Dinge an data.table
weitergibt? Wie gebe ich beispielsweise den Spaltennamen weights
? Wie überlasse ich thedate
? Ich stelle mir vor, einen Prototyp, der wie folgt aussieht:
myfun = function(dtb, models, weights, dates)
Lassen Sie mich klar sein: die Formeln meiner Funktion übergeben ist nicht das Problem. Wenn die weights
wollte ich verwenden und der Spaltenname beschreibt das Datum, wurde thedate
bekannt dann meine Funktion einfach könnte wie folgt aussehen:
myfun = function(dtb, models) {
res = lapply(models, function(f) {dtb[,as.list(coef(lm(f, weights=weights, data=.SD))),by=thedate]})
#do more stuff with res
}
jedoch die Spaltennamen entsprechend thedate
und zum weights
im Voraus nicht bekannt sind. Ich möchte sie als so meiner Funktion zu übergeben:
#this will not work
myfun = function(dtb, models, w, d) {
res = lapply(models, function(f) {dtb[,as.list(coef(lm(f, weights=w, data=.SD))),by=d]})
#do more stuff with res
}
Dank
interessant. Vielen Dank! – Alex
+1 Vielleicht '.BY' nützlich hier, um die' match.call() 'Zeile zu vermeiden, nicht sicher. –