2011-09-23 114 views
-1

我在一些名为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

我没有降低评分,但我会注意到你没有说出什么地方出了问题,但是没有成功。 – joran

+0

是的。最后一种方法不起作用,因为当我在控制台上调用回归时,名称保持不变。这甚至没有让我感到意外,我只是错过了如何在这种情况下将其分配给全球环境。另一个返回了以下错误:错误在correctNames(reglist,namevec,pos):object'namevec'not found –

回答

3

有没有“我”“correctNames的是第一个版本里面“功能;而且你可能没有意识到你不是将它分配给“回归”,而只是分配给回归对象的副本。尝试改为:

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 
+0

澄清一点,这个工作的原因是该函数返回修改后的对象;你原来的功能没有。 – Aaron

+0

你们对我错过的东西完全正确。我应该更好地称它为一天。 –

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 
+0

光滑。只需要获得更多有关ldply和其他'plyr'功能的经验。我看到它帮助了很多。尽管如此,我仍然怀疑是否还有一种解决方案。我一直问的原因是,我意识到我在几个月前尝试解决另一个问题,然后才进行R休息。所以我想说的是,我的直觉很可能让我回到基于乐子的解决方案。也许我需要改变这一点,但也许还有一种乐观的解决方案。 –

+0

如果您对mapply解决方案感到满意,我不能接电话,但是会注意到'lapply'在这里更难使用,因为您传递了两个多值项目:'回归'列表和' params [,1]向量,他们需要进行匹配。你的for循环是用索引做htat的,而mapply是这样做的,暗示 –

+0

嗯。我只能接受一个,只能发一个upvote。嗯,我想我必须接受缓和解决方案,因为我更多地向这个方向提出了要求。尽管在我的个案中Rammath是对的 - 这是一个后续行动,这个答案更合适。我试图让这个问题更一般化,这次我只是冒着提出一个好问题的机会。 –

相关问题