尝试遍历 R 中的 "plm" 个对象并替换系数(原子向量,非语言)
Trying to loop through "plm" objects in R and replace coefficients (atomic vector, non-language)
注意:我是 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 对象,当我尝试遍历对象名称中的最后一个数字时,我在尝试时收到此错误(仅显示 female_q 数据框中的一个点) 得到:
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:
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 的调用方式,或者类似的东西?将不胜感激任何帮助!谢谢!!!
没关系,我知道了:我把我所有的 plm 对象都放在一个列表中,然后我就不必使用 get 或 assign 命令,它完美地工作:
plm_female_all[[i]]$coefficients[x] = female_q[1,x]
恭喜您从混乱的 get
和 assign
过渡到 list
我还没有对此进行测试,但这可以简化处理过程
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))
注意:我是 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 对象,当我尝试遍历对象名称中的最后一个数字时,我在尝试时收到此错误(仅显示 female_q 数据框中的一个点) 得到:
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:
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 的调用方式,或者类似的东西?将不胜感激任何帮助!谢谢!!!
没关系,我知道了:我把我所有的 plm 对象都放在一个列表中,然后我就不必使用 get 或 assign 命令,它完美地工作:
plm_female_all[[i]]$coefficients[x] = female_q[1,x]
恭喜您从混乱的 get
和 assign
过渡到 list
我还没有对此进行测试,但这可以简化处理过程
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))