Vorrei eseguire una regressione all'interno di data.table
. Il formula
deve essere costruito dinamicamente. Ho provato il seguente metodo:creare una formula in un ambiente data.table in R
x = data.table(a=1:20, b=20:1, id=1:5)
> x[,as.list(coef(lm(as.formula("a ~ b")))),by=id]
Error in eval(expr, envir, enclos) : object 'a' not found
Come si fa a specificare l'ambiente ad essere quella del data.table effettivo in cui si verifica la valutazione?
EDIT: Mi rendo conto che posso fare lm (a ~ b). Ho bisogno che la formula sia dinamica, quindi è costruita come una stringa di caratteri. Con dinamicamente intendo la formula può essere paste0(var_1, "~", var_2)
dove var_1 = a
e var_2 = b
Ecco una soluzione pensato penso che possiamo fare meglio:
txt = parse(text="as.list(coef(lm(a ~ b)))")
> x[,eval(txt),by=id]
id (Intercept) b
1: 1 21 -1
2: 2 21 -1
3: 3 21 -1
4: 4 21 -1
5: 5 21 -1
Penso che questo è solo un duplicato di http://stackoverflow.com/questions/14721592/r-dynamically-build-list-in-data-table-or-ddply/14721921#14721921 . Non votando per chiudere ancora perché penso che sia necessario spiegare e illustrare meglio ciò che intendi per "costruire dinamicamente". –
leggerà, non ho visto quello, ma non penso che sia un duplicato. in particolare come si ottiene l'handle sull'ambiente all'interno del data.table effettivo? – Alex