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?
>
>

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to