簡體   English   中英

apply() 到 data.frame 的列

[英]apply() to columns of data.frame

在 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的文檔中,

細節

如果 X 不是數組而是具有非 null 暗值(例如數據框)的類的對象,則應用嘗試通過 as.matrix 將其強制轉換為二維數組(例如,數據框架)或通過 as.array。

由於這些對象只能容納一個類,因此您要么會得到所有類都是數字,要么如果至少有一個非數字列,那么您將得到所有的FALSE 我們可以將它與sapply的結果進行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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM