我最近开始使用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
但是,
apply(iris, 2, FUN = is.numeric)
返回
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
FALSE FALSE FALSE FALSE FALSE
发生了什么事?
答案 0 :(得分:8)
它们都是FALSE
因为apply()
在应用iris
函数之前将is.numeric()
强制转换为矩阵。从help(apply)
关于第一个参数X
-
如果
X
不是数组而是具有非空昏暗值的类的对象(例如数据框),apply
会尝试通过{{1}将其强制转换为数组如果它是二维的(例如,数据帧)或通过as.matrix
。
as.array
所以你有它。实际上,这些列在强制之后都变成了字符,因为矩阵只能采用一种数据类型(参见is.array(iris)
# [1] FALSE
)。 as.matrix(iris)
的详细信息部分讨论了整个事物被强制转换为字符而不是某些其他数据类型的原因。
正如Pascal所说,你应该使用help(as.matrix)
。
sapply()
或稍高效sapply(iris, is.numeric)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# TRUE TRUE TRUE TRUE FALSE
。
vapply()