如果我制作这样的矩阵;
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
答案 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
这是怪异的,我不会推荐它,但我发布它是为了完整。