我最近开始使用 R 和apply()
功能让我绊倒。我很感激这方面的帮助:
is.numeric(iris$Sepal.Length) # returns TRUE
is.numeric(iris$Sepal.Width) # returns TRUE
is.numeric(iris$Petal.Length) # returns TRUE
is.numeric(iris$Petal.Width) # returns TRUE
but,
apply(iris, 2, FUN = is.numeric)
returns
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
FALSE FALSE FALSE FALSE FALSE
这是怎么回事?
他们都是FALSE
因为apply()
强制iris
在应用之前到矩阵is.numeric()
功能。从help(apply)
关于第一个论点,X
-
If X
不是数组,而是具有非空暗淡值的类的对象(例如数据框),apply
尝试通过以下方式将其强制为数组as.matrix
如果它是二维的(例如数据框)或通过as.array
.
is.array(iris)
# [1] FALSE
所以你有它。强制转换后,这些列实际上都变成了字符,因为矩阵只能采用一种数据类型(请参阅as.matrix(iris)
)。整个事情被强制为字符而不是其他数据类型的原因在Details的部分help(as.matrix)
.
正如帕斯卡所指出的,你应该使用sapply()
.
sapply(iris, is.numeric)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# TRUE TRUE TRUE TRUE FALSE
或者效率稍微高一点vapply()
.
vapply(iris, is.numeric, NA)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)