2011-04-10 41 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"))