0

2 つの入力の行名と列名が一致しない場合、関数を停止してエラー メッセージを返すようにしたいと考えています。入力は、行列または data.frames のいずれかです。

私は成功せずに次のことを試しました:

abun <- matrix(c(0.4,0,0.6,0.1,0.4,0.5), 
    nrow = 2, ncol = 3, byrow = TRUE, 
    dimnames = list(c("x", "y"), 
    c("A","B","C")))

x<-data.frame("Trait1" =c(1,1,0),"Trait2"=c(1,1,1),
        "Trait3" =c(1,1,0),"Trait4" =c(1,0,1))
rownames(x)<-c("A","B","D")                 


test<-function(abun,x){
if(colnames(abun) != rownames(x))stop("species names in abun and x do not match")
abun<-abun*2
abun        
}       

test(abun,x)

どんな洞察も大歓迎です!

4

1 に答える 1

1

anyif文に書きます。

test<-function(abun,x){
  if(any(colnames(abun) != rownames(x)))
    stop("species names in abun and x do not match")
  abun<-abun*2
  abun        
}

ベクトル演算のすべての結果が評価されるようにします。

于 2013-09-12T09:19:56.870 に答える