R使用rbind,其名称来自另一个变量

时间:2013-03-12 18:46:56

标签: r

如果我制作这样的矩阵;

m<-matrix(1,dimnames=list('row','column'))
    column
row      1

我可以使用rbind

添加一个新行
m<-rbind(m,row2=2)
     column 
row       1 
row2      2

但是......如果我有一个像

这样的字符串变量
tag<-"row3"

为什么我不能将rbind用作

m<-rbind(m,tag=3)

其中row3应该是,而不是标记为

     column
row       1
row2      2
tag       3

但想要

     column
row       1
row2      2
row3      3

3 个答案:

答案 0 :(得分:4)

您可以在不命名新行的情况下使用rbind,然后使用rownames命名该行:

m <- rbind(m,3)
rownames(m)[3]<-tag

这与@ agstudy解决方案之间的一些基准测试:

m <- matrix(1,dimnames=list('row','column'))
m <- rbind(m,row2=2)
tag <- "row3"

fn1<-function(m,tag){
  m <- rbind(m,matrix(3,dimnames=list(tag,'column')))
  m
}

fn2<-function(m,tag){
  m <- rbind(m,3)
  rownames(m)[3]<-tag
  m
}
library(microbenchmark)
microbenchmark(fn1(m,tag),fn2(m,tag))
Unit: microseconds
        expr    min     lq median     uq    max neval
 fn1(m, tag)  4.665  5.598  6.065  6.532 15.862   100
 fn2(m, tag) 11.663 13.062 13.063 13.530 48.517   100

答案 1 :(得分:3)

你可以通过创建一个带有正确名字的矩阵

来做到这一点
m <- matrix(1,dimnames=list('row','column'))
m <- rbind(m,row2=2)
tag <- "row3"
m <- rbind(m,matrix(3,dimnames=list(tag,'column')))

m
     column
row       1
row2      2
row3      3

答案 2 :(得分:2)

substitute() does not process function arguments以来,在这种情况下模拟动态变量名称的唯一方法是eval(parse(...))

> m <- eval(parse(text=paste("rbind(m,",tag,"=3)")))
> m
     column
row       1
row2      2
row3      3

这是怪异的,我不会推荐它,但我发布它是为了完整。