[R] Check if data frame column is numeric

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Tue Dec 16 19:01:47 CET 2008


from ?apply:

" If 'X' is not an array but has a dimension attribute, 'apply' attempts
to coerce it to an array via as.matrix' if it is two-dimensional (e.g.,
data frames) or via 'as.array'."

if any of the columns in your dataframe is not numeric, apply will try
to coerce all of them to the least common supertype, and you'll get
FALSE for each column;  this is not the case with sapply.

d1 = data.frame(x=numeric(10), y=numeric(10))
d2 = data.frame(d1, z=character(10))

apply(d1, 2, is.numeric)
# TRUE TRUE
apply(d1, 2, function(x) is.numeric(x))
# same as above, redundant code
sapply(d1, is.numeric)
# TRUE TRUE

apply(d2, 2, is.numeric)
# FALSE FALSE FALSE
sapply(d2, is.numeric)
# TRUE TRUE FALSE

vQ




Mark Heckmann wrote:
> Hi R-users,
>
> I want to apply a function to each column of a data frame that is numeric.
> Thus I tried to check it for each column first: 
>
>   
>> apply(df, 2, function(x) is.numeric(x))
>>     
>
>      A60       A64      A66a       A67       A71      A75a       A80
> A85       A91       A95       A96       A97       A98       A99 
>     FALSE     FALSE     FALSE     FALSE     FALSE     FALSE     FALSE
> FALSE     FALSE     FALSE     FALSE     FALSE     FALSE     FALSE
>
> I get only FALSE results although the variables are numeric. When I try the
> following it works:
>
>   
>> is.numeric(df$A60)
>>     
> [1] TRUE
>
> What am I doing wrong?
>
>



More information about the R-help mailing list