3

そのようなマトリックスを作成すると;

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

rbindで新しい行を追加できます

m<-rbind(m,row2=2)
     桁
行 1
行 2 2

しかし...次のような文字列変数がある場合

tag<-"row3"

rbind を as として使用できないのはなぜですか

m<-rbind(m,tag=3)

row3 はどこにあるべきであり、次のようにタグ付けしないでください

     桁
行 1
行 2 2
タグ 3

しかし欲しい

     桁
行 1
行 2 2
行3 3
4

3 に答える 3

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
于 2013-03-12T19:42:31.770 に答える
3

これを行うには、正しい dimnames を持つマトリックスを作成します

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
于 2013-03-12T18:56:09.787 に答える
2

substitute() は関数の引数を処理しないため、この場合動的変数名をエミュレートする唯一の方法は次のようになりますeval(parse(...))

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

気紛れで、お勧めしませんが、完全を期すために投稿します。

于 2013-03-12T21:15:16.107 に答える