我正在尝试熟悉构成R的广阔宇宙。有一个出色的功能by()似乎可以满足我的需要,但它似乎并不喜欢在数据框中选择多个列。
我使用了标准的虹膜数据集,虽然选择了单列看起来很正常,但是似乎不喜欢选择多列。该示例取自一本参考书,但是当然可能有错字。
第一个版本(可行)
> by(iris[,2],Species,mean)
Species: setosa
[1] 3.428
------------------------------------------------------------
Species: versicolor
[1] 2.77
------------------------------------------------------------
Species: virginica
[1] 2.974
第二版(不是)
> by(iris[,2:3],Species,mean)
Species: setosa
[1] NA
------------------------------------------------------------
Species: versicolor
[1] NA
------------------------------------------------------------
Species: virginica
[1] NA
Warning messages:
1: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
2: In mean.default(data[x, , drop = FALSE], ...) :
argument is not numeric or logical: returning NA
3: In mean.default(data[x, , drop = FALSE], ...) :
感谢收到任何解释。
您收到的消息与by
功能无关,而与无关mean
。
您data.frame
在mean
期望向量时将其传递了。
相反,如果您要使用对data.frame
s起作用的函数,则不会引发警告:
by(iris[,2:3],iris$Species, colMeans)
by(iris[,2:3],iris$Species, print)
etc
如果需要,你可以嵌套*ply
式功能(例如by
,tapply
,lapply
等)。尝试以下示例:
by(iris[,2:3],iris$Species,lapply, mean)
mean
:注意,如果您尝试调用mean
任何data.frame,它将抱怨:
mean(iris[,2:3])
mean(iris[iris$Species==iris$Species[[1]] ,2:3])
使用colMeans
替代
colMeans(iris[iris$Species==iris$Species[[1]] ,2:3])
不相关的注释:避免使用attach
;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句