注意:我是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 时,我得到了这个错误(只显示了female_q数据框中的一个点) EM>:
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的方式,或者沿着这些方向改变一些东西?非常感谢任何帮助!感谢!!!
答案 0 :(得分:0)
没关系,我明白了:我把所有的plm对象放在一个列表中,然后我就不必使用 get 或 assign 命令,它完美地运作:
plm_female_all[[i]]$coefficients[x] = female_q[1,x]
答案 1 :(得分:0)
恭喜您从凌乱的list
和get
&#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))