R: Изменение имен в именованном векторе - PullRequest
1 голос
/ 10 апреля 2011

Именованные векторы 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=""))
                               )

Есть ли какой-то нелепый способ сделать это? Или мне придется придерживаться того, что я написал?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

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"))
2 голосов
/ 10 апреля 2011

Предполагая, что вы комбинируете векторы, используя c(), я не верю, что есть "чистый" способ сделать это.

В приведенном выше коде вам даже не нужно использовать sapply. Просто paste(names(coefficients_estimated), "coef", sep="") даст вам то же самое. Вы можете стать еще проще, применив имена к комбинированному вектору и отдельно.

Если бы это были фреймы данных, аргумент suffixes был бы именно тем, что вы хотите.

1 голос
/ 10 апреля 2011
coef_ses_estimated <- c(coefficients_estimated,ses_estimated)
names(coef_ses_estimated) <- as.vector(outer(names(coefficients_estimated),
                                             c("coef","se"),paste,sep="_"))
...