r - apply() 到 data.frame 的列

标签 r

我不太理解 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/

相关文章:

r - 如何从R Shiny 的选择输入(multiple = TRUE)动态定义公式

r - 如何使用函数在data.table/R 中进行递归计算?

r - 使用 kable 和 knitr 保留 table() 中的行/列标签

r - 生成包含 R 中给定术语的 DocumentTermMatix

r - 在 ggplot2 中组合图例

r - 在 Rstudio 中修改 Tukey HSD 95% 系列 CL 图

R Markdown 在一个项目中找不到 .bib 文件,而在另一个项目中工作正常

r - 如何从R中的向量中抽取N个随机样本?

从 .r 文件中删除所有评论?

r - 将第一行转换为数据帧列表中的列名称,然后删除第一行