我不太理解 data.frame 列中 apply()
的行为:
apply(mtcars, 2, is.numeric)
# mpg cyl disp hp drat wt qsec vs am gear carb
# TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
apply(iris, 2, is.numeric)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# FALSE FALSE FALSE FALSE FALSE
两个表中都有数值数据,为什么结果不同?
此外,如果我向 mtcars
添加一列,它会更改所有列的结果:
mtcars$colA <- 'charA'
apply(mtcars, 2, is.numeric)
# mpg cyl disp hp drat wt qsec vs am gear carb colA
# FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
出于我的目的(确定列的类型),lapply
完成了这项工作(lapply(mtcars, is.numeric)
) - 但我仍然想弄清楚弄清楚 apply(df,2,myfunc)
最佳答案
来自apply
的文档,
Details
If X is not an array but an object of a class with a non-null dim value (such as a data frame), apply attempts to coerce it to an array via as.matrix if it is two-dimensional (e.g., a data frame) or via as.array.
由于这些对象只能容纳一个类,那么您要么得到所有都是数字的,要么如果至少有一个非数字列,那么您将得到所有的 FALSE
。我们可以将其与sapply
的结果进行比较,
apply(iris, 2, is.numeric)
#Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# FALSE FALSE FALSE FALSE FALSE
sapply(iris, is.numeric)
#Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# TRUE TRUE TRUE TRUE FALSE
关于r - apply() 到 data.frame 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59392240/