[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))

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)

> sapply(1:2, function(i) identical(as.numeric(i),1) )

> sapply(1:2, function(i) identical(as(i,"numeric"),1) )

These are the results of R's hair-splitting!


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:


Slightly simplified to emphasize your point:

[1] "integer"

[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


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:

  num 1

  int [1:2] 1 2

  num [1:2] 1 2

  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.


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



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