Size: a a a

R (язык программирования)

2020 November 19

ГД

Григорий Демин... in R (язык программирования)
Иван Поздняков
я так-то довольно нейтрален вообще, мне самому нравится data.table, но все так ополчились на тайди, что прямо уж как-то не выдержал)
У меня немного личные причины для неприязни к tidy - мне issue пишут, что в моем пакете что-то не работает, потому что Хэдли что-то переделал. Причем сам пакет от dplyr не зависит никак. Но tidyverse, например стали использовать vec_c вместо с- решали проблемы, которые никого не волновали. У меня от этого сразу две issue, которые можно исправить только грязными хаками. Причем проблема очевидно не моя. Как я понимаю, там идет отказ от самых основных классов R, типа стандртных векторов.
источник

AM

Andrey Malakhov in R (язык программирования)
Голландские митапы мертвы, обычно https://satrdays.org/events/ был окей, но сайт не обновлялся давно
источник

ИП

Иван Поздняков... in R (язык программирования)
Григорий Демин
Ну это зря... Простые вещи выглядят в data.table очень понятно. Типа:
mtcars[, new:=am + vs]
# или
mtcars[, mean(mpg), by = am]
Вот сложные операции действительно плохо выглядят по сравнению с dplyr:
mtcars[,(many_names) := lapply(.SD, mean), by = vs, SDcols = am:cyl]
вот в конце как раз хороший пример, потому что в тайди это будет чутка длиннее, но понятнее:
mtcars %>%
 group_by(vs) %>%
 mutate(across(am:cyl, mean))
источник

ГД

Григорий Демин... in R (язык программирования)
Да, я как раз и считаю, что сложные вещи в tidy понятнее выглядят. Просто потмому что придется разбивать на отедльные маленькие кусочки
источник

PU

Philipp Upravitelev in R (язык программирования)
есть нюанс - у Григория в выражении происходит присвоение на месте, а вот в твоем решении просто результат среднего по списку колонок
источник

ИП

Иван Поздняков... in R (язык программирования)
Philipp Upravitelev
скажи, а человек, который не знает tidy, сможет прочитать код чисто в тайди-стиле? необязательно работа с таблицами, может быть что угодно

просто у меня большая проблема с этим, например
Тайди, по крайней мере, стремится быть похожим на псевдо-язык. И в какой-то степени это получается. Мне кажется, что да, если попытаться расшифровать то, что написано тайдиверсом, то можно примерно понять, что происходит в коде, не понимая языка.
источник

EP

Ed P in R (язык программирования)
Philipp Upravitelev
спасибо
А вообще на митапе есть даже список R-овских групп, там сразу можно увидеть где следующая встреча.
https://www.meetup.com/pro/r-user-groups/
источник

ИП

Иван Поздняков... in R (язык программирования)
Philipp Upravitelev
есть нюанс - у Григория в выражении происходит присвоение на месте, а вот в твоем решении просто результат среднего по списку колонок
тогда так:
mtcars <- mtcars %>%
 group_by(vs) %>%
 mutate(across(am:cyl, mean, .names = "{.col}_mean"))
источник

ГД

Григорий Демин... in R (язык программирования)
Иван Поздняков
Тайди, по крайней мере, стремится быть похожим на псевдо-язык. И в какой-то степени это получается. Мне кажется, что да, если попытаться расшифровать то, что написано тайдиверсом, то можно примерно понять, что происходит в коде, не понимая языка.
Стремился раньше. А когда стали вводить все эти !! {{}} := ~ , они эту идеологию начали ломать. Это как раз программерский подход. Если бы шли за читамостью, то могли бы сделать обычные слова. Какой-нибудь indirect как в Экселе, вместо {{}}. ну или просто использовать get из базы
источник

PD

Pavel Demin in R (язык программирования)
Ivan Struzhkov
36, 18 и 21
Это очень смешно!
источник

ИП

Иван Поздняков... in R (язык программирования)
Григорий Демин
Стремился раньше. А когда стали вводить все эти !! {{}} := ~ , они эту идеологию начали ломать. Это как раз программерский подход. Если бы шли за читамостью, то могли бы сделать обычные слова. Какой-нибудь indirect как в Экселе, вместо {{}}. ну или просто использовать get из базы
честно говоря, я вообще обхожусь без tidy evaluation и всего такого, мне как-то просто особо не приходилось с этим сталкиваться. ну и когда я пробовал писать пакет, я использовал data.table)
под ~ имеется в виду сокращение для анонимных функций? я тоже игнорирую эту часть и делаю function(x) по старинке. Зато во всем остальном люблю purrr, те же варианты с map_*() реально лучше базовых [lsvrtm?]apply
источник

ГД

Григорий Демин... in R (язык программирования)
Это, имхо, не фонтан - mutate(across(am:cyl, mean, .names = "{.col}_mean")) Примерно, как в data.table...
источник

A

Alexander in R (язык программирования)
Григорий Демин
Это, имхо, не фонтан - mutate(across(am:cyl, mean, .names = "{.col}_mean")) Примерно, как в data.table...
Да уж, это реально какая-то жесть пошла
источник

PD

Pavel Demin in R (язык программирования)
Григорий Демин
Это, имхо, не фонтан - mutate(across(am:cyl, mean, .names = "{.col}_mean")) Примерно, как в data.table...
Имхо, пример на data.table выглядит намного понятнее и элегантнее.
источник

ИП

Иван Поздняков... in R (язык программирования)
Григорий Демин
Это, имхо, не фонтан - mutate(across(am:cyl, mean, .names = "{.col}_mean")) Примерно, как в data.table...
ну, .names = «{.col}_mean» можно и убрать, тогда все суперкоротко и просто
источник

ИП

Иван Поздняков... in R (язык программирования)
Pavel Demin
Имхо, пример на data.table выглядит намного понятнее и элегантнее.
элегантность в том, чтобы все впихнуть в одну операцию, - есть, но вот на счет понятнее - не соглашусь
источник

ИП

Иван Поздняков... in R (язык программирования)
но я уверен, что с tidy evaluation тоже будут подвижки, как они были со всеми непонятными (для меня) частями тайдиверс.
источник

PD

Pavel Demin in R (язык программирования)
Хорошее замечание сделал Филипп - не зная глаголов, понять код дплир сложно (мне лично).
И вообще, элегантность это вкусовщина. Я вкатился в data wrangling через data.table - поэтому мне кажется красиво, понятно, читаемо.
Я вообще никогда не аппелирую к скорости дт, у меня редко бывают данные больше 1кк строк. Мне именно кажется, что dt[i,j,by] это супер понятно и в этом элегантность.
А сложные и громоздкие вещи - везде таковыми будут.
источник

PU

Philipp Upravitelev in R (язык программирования)
гайз, раз уж тут все собрались. у меня есть вопрос по статистике.
расскажите, пожалуйста, как высчитывается мощность метода?
в том же power.prop.test()
как мы считаем p-value, я могу понять - берем метрику различия групп и смотрим ее распределение, и по распределению оцениваем вероятность получить такую разницу между группами
но вот как высчитывается бета? я чота застопорился :(
источник

PD

Pavel Demin in R (язык программирования)
Филипп, ну вот что вы диалог в конструктивное русло уводите...
источник