[R] [FORGED] Re: identical() versus sapply()
Paulson, Ariel
apa at stowers.org
Tue Apr 12 02:25:09 CEST 2016
Hi Jeff,
We are splitting hairs because R is splitting hairs, and causing us problems. Integer and numeric are different R classes with different properties, mathematical relationships notwithstanding. For instance, the counterintuitive result:
> identical(as.integer(1), as.numeric(1))
[1] FALSE
Unfortunately the reply-to chain doesn't extend far enough -- here is the original problem:
> sapply(1, identical, 1)
[1] TRUE
> sapply(1:2, identical, 1)
[1] FALSE FALSE
> sapply(1:2, function(i) identical(as.numeric(i),1) )
[1] TRUE FALSE
> sapply(1:2, function(i) identical(as(i,"numeric"),1) )
[1] FALSE FALSE
These are the results of R's hair-splitting!
Ariel
________________________________
From: Jeff Newmiller <jdnewmil at dcn.davis.ca.us>
Sent: Monday, April 11, 2016 6:49 PM
To: Bert Gunter; Paulson, Ariel
Cc: Rolf Turner; r-help at r-project.org
Subject: Re: [R] [FORGED] Re: identical() versus sapply()
Hypothesis regarding the thought process: integer is a perfect subset of numeric, so why split hairs?
--
Sent from my phone. Please excuse my brevity.
On April 11, 2016 12:36:56 PM PDT, Bert Gunter <bgunter.4567 at gmail.com> wrote:
Indeed!
Slightly simplified to emphasize your point:
class(as(1:2,"numeric"))
[1] "integer"
class(as.numeric(1:2))
[1] "numeric"
whereas in ?as it says:
"Methods are pre-defined for coercing any object to one of the basic
datatypes. For example, as(x, "numeric") uses the existing as.numeric
function. "
I suspect this is related to my ignorance of S4 classes (i.e. as() )
and how they relate to S3 classes, but I certainly don't get it
either.
Cheers,
Bert
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things
into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Mon, Apr 11, 2016 at 9:30 AM, Paulson, Ariel <apa at stowers.org> wrote:
Ok, I see the difference between 1 and 1:2, I'll just leave it as one of those "only in R" things.
But it seems then, that as.numeric() should guarantee a FALSE outcome, yet it does not.
To build on what Rolf pointed out, I would really love for someone to explain this one:
str(1)
num 1
str(1:2)
int [1:2] 1 2
str(as.numeric(1:2))
num [1:2] 1 2
str(as(1:2,"numeric"))
int [1:2] 1 2
Which doubly makes no sense. 1) Either the class is "numeric" or it isn't; I did not call as.integer() here. 2) method of recasting should not affect final class.
Thanks,
Ariel
-----Original Message-----
From: Rolf Turner [mailto:r.turner at auckland.ac.nz]
Sent: Saturday, April 09, 2016 5:27 AM
To: Jeff Newmiller
Cc: Paulson, Ariel; 'r-help at r-project.org'
Subject: Re: [FORGED] Re: [R] identical() versus sapply()
On 09/04/16 16:24, Jeff Newmiller wrote:
I highly
recommend making friends with the str function. Try
str( 1 )
str( 1:2 )
Interesting. But to me counter-intuitive. Since R makes no distinction between scalars and vectors of length 1 (or more accurately I think, since in R there is *no such thing as a scalar*, only a vector of length
1) I don't see why "1" should be treated in a manner that is categorically different from the way in which "1:2" is treated.
Can you, or someone else with deep insight into R and its rationale, explain the basis for this difference in treatment?
for the clue you need, and then
sapply( 1:2, identical, 1L )
cheers,
Rolf
--
Technical Editor ANZJS
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276
________________________________
R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.
[[alternative HTML version deleted]]
More information about the R-help
mailing list