【问题标题】:R: Changing the names in a named vectorR:更改命名向量中的名称
【发布时间】:2011-04-10 01:10:13
【问题描述】:

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”,为此,我想出了一个我认为非常丑陋的hack:

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=""))
                               )

有没有一种惯用的方法来做到这一点?还是我必须坚持我所写的内容?

【问题讨论】:

    标签: r vector naming


    【解决方案1】:

    假设您使用c() 组合向量,我认为没有“纯粹”的方法可以做到这一点。

    在您上面的代码中,您甚至不需要使用sapply。只需paste(names(coefficients_estimated), "coef", sep="") 就能得到同样的结果。通过将名称应用于组合矢量而不是单独应用,您仍然可以变得更简单。

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

    【讨论】:

      【解决方案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"))
      

      【讨论】:

        【解决方案3】:
        coef_ses_estimated <- c(coefficients_estimated,ses_estimated)
        names(coef_ses_estimated) <- as.vector(outer(names(coefficients_estimated),
                                                     c("coef","se"),paste,sep="_"))
        

        【讨论】:

          猜你喜欢
          • 2021-10-19
          • 1970-01-01
          • 2019-02-27
          • 2021-03-31
          • 2019-01-31
          • 2021-03-04
          • 1970-01-01
          • 2018-05-09
          • 1970-01-01
          相关资源
          最近更新 更多