2011-04-10 112 views
1

R的命名向量非常方便,但是,我想合并两个向量,这些向量包含系数估计值和这些估计值的标准误差,并且这两个向量具有相同的名称:R:改变命名向量中的名称

> coefficients_estimated 
    y0   Xit (Intercept) 
    1.1   2.2   3.3 

> ses_estimated 
    y0   Xit (Intercept) 
    .04   .11   .007 

如果我知道元素的确切顺序,这将很容易解决,但这不能保证在我的脚本中,所以我不能简单地做names(ses_estimated) <- whatever。所有我想要做的就是添加或者“COEF”或“SE”,在每个名字的末尾,而要做到这一点,我想出了什么,我认为是一个非常丑陋的黑客:

names(coefficients_estimated) <- sapply(names(coefficients_estimated), 
             function(name)return(paste(name,"coef",sep="")) 
             ) 
names(ses_estimated) <- sapply(names(ses_estimated), 
           function(name)return(paste(name,"se",sep="")) 
           ) 

是有没有一种方法可以做到这一点?或者我将不得不坚持我写的东西?

回答

2

假设你使用c()来合并载体,我不相信有一个“纯”的方法来做到这一点。

在上面的代码中,您甚至不需要使用sapply。只要paste(names(coefficients_estimated), "coef", sep="")会让你同样的事情。通过将名称应用于组合矢量还是单独使用,您可以变得更简单一些。

如果这些是数据帧,那么suffixes参数就是您想要的。

1
coef_ses_estimated <- c(coefficients_estimated,ses_estimated) 
names(coef_ses_estimated) <- as.vector(outer(names(coefficients_estimated), 
              c("coef","se"),paste,sep="_")) 
2

setNames是在这里帮助:

# Make fake data for test: 
namedData <- function(x) setNames(x, c("y0", "Xit", "(Intercept)")) 

coefficients_estimated <- namedData(c(1.1, 2.2, 3.3)) 
ses_estimated <- namedData(c(.04, .11, .007)) 

# Do it: 
withNameSuffix <- function(obj, suffix) setNames(obj, paste(names(obj), suffix, sep="")) 
combined <- c(withNameSuffix(coefficients_estimated, "coef"), 
       withNameSuffix(ses_estimated, "se"))