Я обрабатываю данные списка данных, на которых я выполняю матричные вычисления, и у меня странное поведение.
Когда я извлекаю данные из списка и применяю функцию tcrossprod, я получаю ответы, отличные от тех, которые я получаюожидать.Ниже приведен упрощенный пример проблемы.
Мои данные имеют такую форму ...
> test_list <- list(data.frame("col1" = c('a','b'), "col2" = c(229187.82,135323.01)))
> test_list
[[1]]
col1 col2
1 a 229188
2 b 135323
Применение tcrossprod дает неверный результат для данных ...
> tcrossprod(test_list[[1]]$col2)
[,1] [,2]
[1,] 52527056836 31014385658
[2,] 31014385658 18312317035
Это правильный ответ ...
> vec <- c(229188,135323)
> vec
[1] 229188 135323
> tcrossprod(vec)
[,1] [,2]
[1,] 52527139344 31014407724
[2,] 31014407724 18312314329
А вот разница между двумя вычислениями ...
> tcrossprod(vec) - tcrossprod(test_list[[1]]$col2)
[,1] [,2]
[1,] 82507.6 22066.26
[2,] 22066.3 -2706.46
Я не могу найти причину, почемусуществует несоответствие между двумя расчетами ...
> typeof(test_list[[1]]$col2)
[1] "double"
> typeof(vec)
[1] "double"
> class(test_list[[1]]$col2)
[1] "numeric"
> class(vec)
[1] "numeric"
Есть ли способ исправить эту проблему, чтобы вычисленные числа были правильными?