Один из вариантов - обернуть list
, а затем создать объект tibble/data.frame
, когда cbind
преобразуется в matrix
, а matrix
может содержать только один класс
library(tibble)
tibble(col1 = 0, col2 = list(mynumber))
# A tibble: 1 x 2
# col1 col2
# <dbl> <list>
#1 0 <mpfr>
cbind
даже для классов character
и numeric
возвращает character
для всех столбцов, и это не очень хороший вариант, если vector
s для привязки другого класса
cbind(letters[1:4], 1:4)
Проверяя methods
для cbind
после загрузки пакета
methods('cbind')
#[1] cbind,ANY-method cbind,Mnumber-method cbind.bigq* cbind.bigz*
#[5] cbind.data.frame cbind.grouped_df* cbind.ts*
Таким образом, если он использовал правильные cbind
методы для Mnumber
, он не должен был давать Inf
cbind(rep(0,4), mynumber)
#'mpfrMatrix' of dim(.) = (4, 2) of precision 50 .. 53 bits
# [,1] [,2]
#[1,] 0. 3.4556867084990952e+314
#[2,] 0. 583322.33392099757
#[3,] 0. 2.1899410233914937e-17
#[4,] 0. 2.3271850367397449e+66
Или используйте повторное использование значения
cbind(0, mynumber)
#'mpfrMatrix' of dim(.) = (4, 2) of precision 50 .. 53 bits
# [,1] [,2]
#[1,] 0. 3.4556867084990952e+314
#[2,] 0. 583322.33392099757
#[3,] 0. 2.1899410233914937e-17
#[4,] 0. 2.3271850367397449e+66
Кроме того, если мы проверяем маскированные функции, когда мы загружаем пакет, он говорит
Следующие объекты маскируются из 'package: base':
cbind, pmax, pmin, rbind
Используя cbind
из base
, ?
можно копировать. Возможно, что для OP cbind
от base
base::cbind(0, mynumber)
# mynumber
#[1,] 0 ?
#[2,] 0 ?
#[3,] 0 ?
#[4,] 0 ?
Если cbind
из Rmpfr
замаскировано, тогда используйте ::
mydata <- Rmpfr::cbind(0, mynumber)
mydata
#'mpfrMatrix' of dim(.) = (4, 2) of precision 50 .. 53 bits
# [,1] [,2]
#[1,] 0. 3.4556867084990952e+314
#[2,] 0. 583322.33392099757
#[3,] 0. 2.1899410233914937e-17
#[4,] 0. 2.3271850367397449e+66
mydata/rowSums(mydata)
#'mpfrMatrix' of dim(.) = (4, 2) of precision 53 bits
# [,1] [,2]
#[1,] 0. 1.0000000000000000
#[2,] 0. 1.0000000000000000
#[3,] 0. 1.0000000000000000
#[4,] 0. 1.0000000000000000