Как преобразовать коэффициент в целое число \ числовое без потери информации?

Это действительно зависит от сервера базы данных.

Например, SQL Server 2008 поддерживает тип данных FILESTREAM для этой ситуации.

Другое чем это, если вы используете MemoryStream, у него есть метод ToArray() , который преобразуется в byte[] - это может использоваться для заполнения поля varbinary ..

541
задан Jaap 1 April 2018 в 11:06
поделиться

1 ответ

См. Раздел «Предупреждение» в ? Factor :

В частности, as.numeric применяется к фактор не имеет смысла, и может происходят по неявному принуждению. К преобразовать коэффициент f в приблизительно его исходное числовое значения, as.numeric (levels (f)) [f] is рекомендуется и немного больше эффективнее, чем как числовой (как символ (f)) .

В FAQ по R есть аналогичный совет .


Почему as.numeric (уровни (f)) [f] более эффективны, чем as.numeric (as.character (f)) ?

as.numeric (as.character (f)) фактически as.numeric (levels (f) [f]) ​​, поэтому вы выполняете преобразование в числовое значение на length (x) , а не на nlevels (x) значениях. Разница в скорости будет наиболее очевидной для длинных векторов с несколькими уровнями. Если значения в основном уникальны, большой разницы в скорости не будет. Как бы вы ни выполняли преобразование, эта операция вряд ли станет узким местом в вашем коде, поэтому не беспокойтесь об этом слишком сильно.


Некоторые тайминги

library(microbenchmark)
microbenchmark(
  as.numeric(levels(f))[f],
  as.numeric(levels(f)[f]),
  as.numeric(as.character(f)),
  paste0(x),
  paste(x),
  times = 1e5
)
## Unit: microseconds
##                         expr   min    lq      mean median     uq      max neval
##     as.numeric(levels(f))[f] 3.982 5.120  6.088624  5.405  5.974 1981.418 1e+05
##     as.numeric(levels(f)[f]) 5.973 7.111  8.352032  7.396  8.250 4256.380 1e+05
##  as.numeric(as.character(f)) 6.827 8.249  9.628264  8.534  9.671 1983.694 1e+05
##                    paste0(x) 7.964 9.387 11.026351  9.956 10.810 2911.257 1e+05
##                     paste(x) 7.965 9.387 11.127308  9.956 11.093 2419.458 1e+05
662
ответ дан 22 November 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: