2016-08-15 51 views
0

我正在尝试在r中创建一个抗肺炎克雷伯菌属为'Resistant','Susceptible'或'Intermediate'部分的抗生素矩阵。然而,功能我目前使用:为什么我的函数在创建num(0)和NULL输出?

Klebsiella.pneumoniae.rs.mat1 <-   
tapply(Klebsiella.pneumoniae.rs$resistant_phenotype, INDEX = 
list(Klebsiella.pneumoniae.rs$antibiotic), FUN = function(x) 
{ 
fracR = sum(x=='Resistant')/(nrow(x)) 

fracS = sum(x=='Susceptible')/(nrow(x)) 

fracI = sum(x=='Intermediate')/(nrow(x)) 

return(c(fracR, fracS, fracI)) 
}) 

的输出:

amikacin      Numeric,0 
ampicillin     Numeric,0 
ampicillin/sulbactam   Numeric,0 
aztreonam      Numeric,0 
cefazolin      Numeric,0 
cefepime      Numeric,0 
cefotaxime     Numeric,0 
cefoxitin      Numeric,0 
ceftazidime     Numeric,0 
ceftriaxone     Numeric,0 
cefuroxime     NULL  
cephalothin     Numeric,0 
.... 

任何想法是怎么回事? (原始数据是一列抗生素名称,以及一列耐药表型和其他一些列)

谢谢!

+1

是你的数据数字吗?分享您正在应用此功能的数据。 – user5249203

回答

1

使用length而不是nrow。或者更好,只需使用meannrow返回行数,矢量中没有行。

sum(iris$Species == "setosa")/nrow(iris$Species) 
#numeric(0) 

nrow(iris$Species) 
#NULL 

length(iris$Species) 
#[1] 150 

sum(iris$Species == "setosa")/length(iris$Species) 
#[1] 0.3333333 

mean(iris$Species == "setosa") 
#[1] 0.3333333 
+0

谢谢罗兰!有效。 –

相关问题