В
Ну и надо отметить, что конечное решение было другим if (length(data) == 0 ) {next}
Size: a a a
В
В
АК
> NROW(NULL)
[1] 0
> NROW(list())
[1] 0
NROW
довольно всеядна, при этом поркывает кейс и данных с 0-столбцов и с 0-колонок.В
В
В
⌨
{vctrs}::vec_size
АК
{vctrs}::vec_size
length
.⌨
length
.length
в том смысле что он ведет себя почти предсказуемо для любых типов.{vctrs}
, дата фрейм это не список размера ncol
, а коллекция однострочных фреймов размера nrow
, поэтому условно {vctrs}::vec_size(mtcars) == nrow(mtcars)
, и vec_size(mtcars$hp) == length(mtcars$hp)
.АК
length
в том смысле что он ведет себя почти предсказуемо для любых типов.{vctrs}
, дата фрейм это не список размера ncol
, а коллекция однострочных фреймов размера nrow
, поэтому условно {vctrs}::vec_size(mtcars) == nrow(mtcars)
, и vec_size(mtcars$hp) == length(mtcars$hp)
.⌨
{vctrs}
очень крутая и нужная вещь для языка (и для пакетов) в целом, но это все почти tidyverse
, и не все любят tidyverse
ГД
length
в том смысле что он ведет себя почти предсказуемо для любых типов.{vctrs}
, дата фрейм это не список размера ncol
, а коллекция однострочных фреймов размера nrow
, поэтому условно {vctrs}::vec_size(mtcars) == nrow(mtcars)
, и vec_size(mtcars$hp) == length(mtcars$hp)
.ГД
АК
{vctrs}
очень крутая и нужная вещь для языка (и для пакетов) в целом, но это все почти tidyverse
, и не все любят tidyverse
vctrs
не имеет зависимостей, кроме rlang
вроде бы, то есть вполне может использоваться нелюбителями tidyverse вроде меня. Но пока не встретил кейсов, где этот пакет реально бы пригодился.АК
vctrs
не имеет зависимостей, кроме rlang
вроде бы, то есть вполне может использоваться нелюбителями tidyverse вроде меня. Но пока не встретил кейсов, где этот пакет реально бы пригодился.Imports: ellipsis (≥ 0.2.0), digest, glue, rlang (≥ 0.4.5)
⌨
vctrs
не имеет зависимостей, кроме rlang
вроде бы, то есть вполне может использоваться нелюбителями tidyverse вроде меня. Но пока не встретил кейсов, где этот пакет реально бы пригодился.{glue}
и {digest}
.tidy
-кухню. {vctrs}
позволяет создавать типы с точки зрения software engineer а не statistician, на мой субъективный взгляд.⌨
> vctrs::vec_size(matrix(1:6, nrow = 3))
# 3
АК
{glue}
и {digest}
.tidy
-кухню. {vctrs}
позволяет создавать типы с точки зрения software engineer а не statistician, на мой субъективный взгляд.{vctrs}
позволяет создавать типы с точки зрения software engineer а не statistician, на мой субъективный взгляд.```ГД
> vctrs::vec_size(matrix(1:6, nrow = 3))
# 3
⌨
{vctrs}
позволяет создавать типы с точки зрения software engineer а не statistician, на мой субъективный взгляд.```R
с энтерпрайз-языков, и для меня R
полон всяких костылей и нестыковок, которые наверно удобны для статистика/математика, но для обычного девелопера это сомнительно. Например, {vctrs}
экспортирует свой vec_c
, который корректно склеивает любые коллекции, учитывая их тип. {vctrs}
- метдов, он легко интегрируется во всю инфраструктуру.R
4.0 конкатенация двух факторов приводила хрен пойми к чему. vec_c
делает все корректно.vec_ptype2
, позволяющий найти общий тип для двух объектов, vec_cast
, который приведет один тип к другому если это разрешено, а не просто срежет атрибуты или еще чего.