为什么我的函数在r中创建num(0)和NULL输出?

时间:2016-08-15 15:31:49

标签: r function

我正在尝试在r中创建一个功能,创建一个抗生素基质,对抗其中肺炎克雷伯氏菌是“抗性”,“易感”或“中间”的部分。但是我正在使用的功能:

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 个答案:

答案 0 :(得分: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