2014-12-02 24 views
8

В Rstudio (с использованием R 3.1.1) при запуске этогоRstudio и R терминал дают различные выходы

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

В R 3.1.1 при запуске этого

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

(правильный выход 9183)

Я не могу понять, почему ... помощь очень ценится

+1

Можете ли вы опубликовать 'sessionInfo()' как для подтверждения версий/сборок? – MrFlick

+5

Я думаю, что это разница между 32-битными и 64-битными версиями. Вы используете 64 на Rstudio и 32 на обычном R. В Rstudio перейдите в Инструменты -> Глобальные параметры -> Версия R -> Изменить -> измените на 32-разрядную версию 3.1.1 и снова запустите свой код –

+0

Я получаю 9220 это в R 3.1.2 (64-бит) как в RStudio, так и в R-терминале и 9183, когда я запускаю его в 32-битном ... Подтверждение @ Предложение DavidArenburg – andyteucher

ответ

3

Как отмечает Дэвид Arenburg, это разница между 3 2-битные и 64-битные версии R, по крайней мере на компьютерах Windows. Предположительно, участвует какая-то ошибка округления. Интересно, что 32-битный R получает ответ правильно, тогда как 64-битный R обнаруживает слишком много уникальных чисел.

Во-первых, чтобы подтвердить, что 9183 действительно правильный ответ, я использовал gmp пакет (обертка для многократной точности арифметической библиотеки GMP C), которая обеспечивает результаты, которые не подвержены ошибкам округления:

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

Вот результаты моего 32-битный 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       

А вот результаты моего 64-битный 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

Используют ли большинство людей 32-битная версия R по причинам вроде этого? + – nathanesau

+0

@nathanesau - Нет. Видишь, какая разница между версиями действительно необычна (вероятно, поэтому ваш вопрос получает так много голосов). И на аренах, где такая ошибка округления имеет какую-либо возможность существенного влияния на результаты, люди (должны) использовать дополнительные пакеты, которые поддерживают вычисления с более высокой точностью. –

Смежные вопросы