2014-12-02 17 views
8

W Rstudio (przy użyciu R 3.1.1) po uruchomieniu tegozacisk Rstudio R dają różne wyjścia

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

W R 3.1.1 po uruchomieniu tego

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

(poprawne wyjście 9183)

nie mogę zrozumieć, dlaczego ... pomoc mile widziana

+1

Czy możesz wstawić 'sessionInfo()' z obu w celu potwierdzenia wersji/kompilacji? – MrFlick

+5

Myślę, że jest to różnica między wersjami 32-bitowymi i 64-bitowymi. Korzystasz z 64 na Rstudio i 32 na zwykłym R. W Rstudio idź do Tools -> Global Options -> R version -> Change -> przejdź do wersji 32-bitowej 3.1.1 i ponownie uruchom swój kod –

+0

Otrzymuję 9220 z rzędu to w wersji 3.1.2 (64-bitowej) w terminalu RStudio i R, a 9183, gdy uruchamiam go w wersji 32-bitowej ... Potwierdzam propozycję @ DavidArenburga – andyteucher

Odpowiedz

3

Jak zauważa David Arenburg, jest to różnica pomiędzy 3 Wersje 2-bitowe i 64-bitowe R, przynajmniej na komputerach z systemem Windows. Można przypuszczać, że chodzi o jakiś błąd zaokrąglania. Co ciekawe, to 32-bitowy R dostaje właściwą odpowiedź, podczas gdy 64-bitowy R znajduje zbyt wiele unikalnych liczb.

pierwsze potwierdzenie, że 9183 jest rzeczywiście poprawna odpowiedź, użyłem pakiet gmp (otoki dla C wielokrotnej precyzji arytmetycznej biblioteki GMP), która zapewnia wyniki, które nie są obciążone błędami zaokrągleń:

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

Oto wyniki z moim 32-bitowej 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       

A oto wyniki mojego 64-bitowej 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

Czy większość ludzi używa 32-bitowa wersja R z takich powodów? + – nathanesau

+0

@nathanesau - Nie. Widząc różnicę między wersjami jest naprawdę niezbyt często (prawdopodobnie dlatego, że twoje pytanie dostaje tak wiele głosów). A w arenach, gdzie ten rodzaj błędu zaokrąglania ma jakąkolwiek możliwość istotnego wpływu na wyniki, ludzie (powinni) używać pakietów dodatkowych, które obsługują bardziej precyzyjne obliczenia. –

Powiązane problemy