我正在尝试在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
....
知道这里发生了什么吗? (原始数据是一列抗生素名称,一列抗性表型,以及其他一些列)
谢谢!
答案 0 :(得分:1)
使用length
代替nrow
。或者甚至更好,只需使用mean
。 nrow
返回行数,向量中没有行。
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