2014-12-02 12 views
8

In Rstudio (usando R 3.1.1) quando si esegue questa operazione,Rstudio e R terminale dare uscite diverse

length(unique(sort(c(outer(2:100,2:100,"^"))))) 
# 9220 

In R 3.1.1 quando si esegue questa operazione,

length(unique(sort(c(outer(2:100,2:100,"^"))))) 
# 9183 

(la output corretto è 9183)

io non riesco a capire perché ... aiuto è molto apprezzato

+1

Puoi postare 'sessionInfo()' da entrambi solo per confermare versioni/build? – MrFlick

+5

Penso che sia una differenza tra le versioni a 32 e 64 bit. Stai eseguendo 64 su Rstudio e 32 sul normale R. In Rstudio vai su Strumenti -> Opzioni globali -> Versione R -> Cambia -> cambia in versione 32 bit di 3.1.1 ed esegui di nuovo il codice –

+0

Ottengo 9220 in esecuzione questo in R 3.1.2 (64-bit) nei terminali RStudio e R e 9183 quando lo eseguo a 32-bit ... Confermando il suggerimento di DavidArenburg – andyteucher

risposta

3

Come nota David Arenburg, questa è una differenza tra il 3 Versioni R a 2 e 64 bit, almeno su macchine Windows. Presumibilmente, è implicata una sorta di errore di arrotondamento. È interessante notare che la R a 32 bit ottiene la risposta giusta, mentre la R a 64 bit trova troppi numeri univoci.

primo a confermare che 9183 è davvero la risposta corretta, ho usato il pacchetto gmp (un wrapper per il C multipla precisione aritmetica libreria GMP), che fornisce risultati che non sono soggetti a errori di arrotondamento:

library(gmp) 
x <- as.bigz(2:100) 
length(unique(do.call(c, sapply(x, function(X) x^X)))) 
[1] 9183 

Ecco i risultati del mio 32 bit R:

length(unique(sort(c(outer(2:100,2:100,"^"))))) 
# [1] 9183 
R.version[1:7]    _       
# platform  i386-w64-mingw32    
# arch   i386       
# os    mingw32      
# system   i386, mingw32    
# status          
# major   3       
# minor   1.2       

E qui sono i risultati del mio 64-bit R:

length(unique(sort(c(outer(2:100,2:100,"^"))))) 
# [1] 9220 
R.version[1:7] 
# platform  x86_64-w64-mingw32   
# arch   x86_64      
# os    mingw32      
# system   x86_64, mingw32    
# status          
# major   3       
# minor   1.2       
+0

La maggior parte delle persone usa la versione a 32 bit di R per ragioni come questa? + – nathanesau

+0

@nathanesau - No. Vedere qualsiasi differenza tra le versioni è davvero raro (che è probabilmente il motivo per cui la tua domanda sta ottenendo tanti voti). E nelle arene in cui questo tipo di errore di arrotondamento ha la possibilità di influire in modo significativo sui risultati, la gente (dovrebbe) utilizzare pacchetti aggiuntivi che supportano calcoli di precisione più elevata. –