对于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)
情况下发生了什么< / p>
答案 0 :(得分:2)
根据FALSE
的文档,
详细信息
如果X不是数组,而是具有非空dim值的类的对象(例如数据帧),则如果X是二维的,则尝试通过as.matrix将其强制到数组。 ,一个数据框)或通过as.array。
由于这些对象只能容纳一个类,因此您将得到全部为数字的列,或者如果至少有一个非数字列,则将全部得到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
的结果进行比较,
git clone example.repo