Как отмечает Дэвид 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
Можете ли вы опубликовать 'sessionInfo()' как для подтверждения версий/сборок? – MrFlick
Я думаю, что это разница между 32-битными и 64-битными версиями. Вы используете 64 на Rstudio и 32 на обычном R. В Rstudio перейдите в Инструменты -> Глобальные параметры -> Версия R -> Изменить -> измените на 32-разрядную версию 3.1.1 и снова запустите свой код –
Я получаю 9220 это в R 3.1.2 (64-бит) как в RStudio, так и в R-терминале и 9183, когда я запускаю его в 32-битном ... Подтверждение @ Предложение DavidArenburg – andyteucher