Это действительно зависит от сервера базы данных.
Например, SQL Server 2008 поддерживает тип данных FILESTREAM
для этой ситуации.
Другое чем это, если вы используете MemoryStream
, у него есть метод ToArray()
, который преобразуется в byte[]
- это может использоваться для заполнения поля varbinary
..
См. Раздел «Предупреждение» в ? 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