试图在R中循环“plm”对象并替换系数(原子矢量,非语言)

时间:2016-05-12 21:14:53

标签: r loops vector plm

注意:我是R的超级新手(只是从Stata过渡)!

你好!我有大量的“plm”对象编号为plm_f_1_1,plm_f_1_2,...,plm_f_1_17,plm_f_2_1,...等等,我有系数的数据帧存储,让我们说“female_q [1,]” 。我试图遍历“plm”对象并尝试执行此操作:

for (i in 1:26) {
    plm_f_1_1$coefficients[i]=female_q[1,i]
}

所以这适用于一个plm对象,当我尝试遍历对象名称中的最后一个数字时,当我尝试 get

get(paste0("plm_f_1_",i))$coefficients[1]=female_q[1,1]

Error in get(paste0("plm_f_1_", i))$coefficients[1] = female_q[1,1] : 
  target of assignment expands to non-language object

这个分配

assign(paste0("plm_f_1_",i)$coefficients[1],1)

Error in paste0("plm_f_1_", i)$coefficients : 
  $ operator is invalid for atomic vectors

以下是结构外观的一些描述:

str(get(paste0("plm_f_1_",i))$coefficients)
 Named num [1:26] 0.1362 -0.1835 -0.3464 0.2858 -0.0634 ...
 - attr(*, "names")= chr [1:26] "(Intercept)" "dem_log_gdppc_5" "dem_log_mat_educ_5" "dem_log_pop_15_share_5" ...


get(paste0("plm_f_1_",i))$coefficients[1]
(Intercept) 
  0.1361659 

female_q[1,1]
[1] 0.1314744

我想知道我是否必须改变调用female_q的方式,或者沿着这些方向改变一些东西?非常感谢任何帮助!感谢!!!

2 个答案:

答案 0 :(得分:0)

没关系,我明白了:我把所有的plm对象放在一个列表中,然后我就不必使用 get assign 命令,它完美地运作:

plm_female_all[[i]]$coefficients[x] = female_q[1,x]

答案 1 :(得分:0)

恭喜您从凌乱的listget&#39>过渡到assign

我没有对此进行测试,但这可以简化处理

PLM_List = ls(pattern="^plm_f_*");


fn_ProcessDF = function(PLMObj = PLMname,replacementDF = female_q, colIndices = 1:26) {

PLMObj = get(PLMObj)

PLMObj$coefficients[colIndices] = replacementDF[,colIndices]

PLMObj = PLMObj

}

lapply(1:length(PLM_List),function(x) fn_ProcessDF(PLMObj = x ,replacementDF = female_q[x,], colIndices = 1:26))