在R中的data.table环境中创建公式
我想在data.table中运行回归。公式需要动态构造。我尝试过以下方法:在R中的data.table环境中创建公式,r,environment,data.table,R,Environment,Data.table,我想在data.table中运行回归。公式需要动态构造。我尝试过以下方法: 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 如何将环境指定为进行评估的实际data.table的环境 编辑:我意识到我可以做lma~b。我需要的公式是动态的,所
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
如何将环境指定为进行评估的实际data.table的环境
编辑:我意识到我可以做lma~b。我需要的公式是动态的,所以它作为一个字符串建立起来。我的意思是,公式可以是paste0var_1,~,var_2,其中var_1=a和var_2=b
以下是一个解决方案,我认为我们可以做得更好:
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
lm可以接受字符串作为公式,因此将其与.SD组合如下:
> x[, as.list(coef(lm("a ~ b", .SD))), 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
我认为这只是一个复制品。还没有投票结束,因为我认为您需要更好地解释和说明动态构建的含义。will通读了一遍,没有看到那个,但我不认为它是重复的。特别是如何在实际数据表中处理环境?好主意!我都没想过。你能详细说明一下如何在实际的data.table中获得环境句柄吗?@Alex,试试这个:x[,{e