我在一些名为regressions
的列表中存储了一堆动态创建的回归。现在我想有效地重命名它们的系数。到目前为止我所拥有的是这个循环有效:
for (i in 1:length(params[,1])){
names(regressions[[i]]$coefficients)[pos] <- paste(params[i,1],".lag",params[i,2],sep="")
}
我已经尝试了很长一段时间,在一个函数的帮助下更普遍地完成这项工作,因为这不是我所拥有的唯一回归列表。但是我无法得到任何其他工作。这里有一些基本上基于lapply的其他尝试:
correctNames <- function(reglist,namevec,pos){
names(reglist[[i]]$coefficients)[pos] <- as.character(namevec)
}
lapply(regressions,correctNames(reglist,namevec,pos),
reglist=regressions,namevec=params[,1],pos=2)
另一个尝试是编写一个带有for循环的函数,该函数在内部也可以作为打印显示,但不会全局分配名称(存储回归列表的位置)。
correctNames <- function(reglist,pos,namevec){
for (i in 1:length(params[,1])){
names(reglist[[i]]$coefficients)[pos] <- paste(namevec,".lag",namevec,sep="")
}
#this test proves it's work inside the function...
print(reglist[[10]]
}
啊,给我一个休息时间。
答案 0 :(得分:3)
第一版“correctNames”功能中没有“i”;你可能没有意识到你没有将它分配给“回归”,而只是归结为回归对象的副本。请尝试改为:
correctNames <- function(reglist,namevec,pos){
names(reglist$coefficients)[pos] <- as.character(namevec)
return(reglist) }
newregs <- mapply(correctNames,
reglist=regressions,
namevec=as.character(params[,1]),
MoreArgs= list( pos=2))
在看到Ramnath的注释并注意到代码确实有效但给了“params”的片名之后我查看了params并看到它是一个因素,因此更改了mapply
中的参数致电as.character(params[,1])
。
> newregs[1,1]
[[1]]
(Intercept) log(M1)
-5.753758 2.178137
答案 1 :(得分:1)
如果这是对earlier question的跟进,那么我会做的就是
coefs = plyr::ldply(regressions, coef)
coefs = transform(coefs, reg_name = paste(x, '.lag', l, sep = ""))[,-c(1, 2)]
names(coefs) = c('intercept', 'reg_coef', 'reg_name')
这会给你
intercept reg_coef reg_name
1 -5.753758 2.178137 log(M1).lag0
2 7.356434 7.532603 rs.lag0
3 7.198149 8.993312 rl.lag0
4 -5.840754 2.193382 log(M1).lag1
5 7.366914 7.419599 rs.lag1
6 7.211223 8.879969 rl.lag1
7 -5.988306 2.220994 log(M1).lag4
8 7.395494 7.127231 rs.lag4
9 7.246161 8.582998 rl.lag4