169 похожих чатов

И еще сразу вопрос Контекст - ищу чувствительность у метрики. Для

этого эмулирую ряд изменений метрики и смотрю на процент прокрасившихся тестов.

Соотвествено это итерирование по двум параметрам. Очень хочется это сделать в рамках purrr логики. Но как сделать вложенные итерации - не сообразил.
Внутренний map плохо реагирует на указатели из внешнего.

Поняттно, что можно через циклы и прочее (так примерно и сделал) но интересно чисто пуровское решение так работает?

incr<-seq(1,1.1,0.01)
seeds<-round(runif(1000,1,10000))
expand_grid(incr,seeds)->it
size=10e3


library(purrr)
library(broom)
library(tidyverse)

tibble(
id=1:size,
res=rnorm(size,mean=10,sd=1)
)->dd
map2_df(it$seeds,it$incr,~{set.seed(.x)
dd %>% mutate(sam=sample(id),gr=ifelse(sam<=nrow(.)*0.5,'a','b')) %>%
group_by(gr) %>% nest() %>% pivot_wider(names_from = gr,values_from = data) %>%
mutate(t_test = map2(a, b, ~{t.test(.x$res, .y$res *.y) %>% tidy()}),
a=map(a,nrow),
b=map(b,nrow)
) %>%
unnest(everything()) %>% mutate(seed=.x,incr=.y)
}
)->rs.1

11 ответов

18 просмотров

Как обычно, начну с типичной фразы "здесь все не так". Наперстки и сокрытие реальных действий. Надо делать все прозрачно и ясно, не упираться в tidyverse. И такие имитационные задачи надо оптимизировать на всех шагах. Гипотетически она должна хорошо параллелиться... Да и сэмплы можно сначала пакетом нагенерить... Подкрепляю неидеальным кодом. Это только мысли по мотивам. Мне неочевиден подсчет значения a если replace = TRUE не включен. library(tidyverse) library(data.table) library(broom) library(dqrng) library(tictoc) size <- 100 it_df <- expand_grid(incr = seq(1, 1.1, 0.01), seeds = round(runif(10, 1, 10000))) dt <- data.table(id = 1:size, res = rnorm(size, mean = 10, sd = 1)) ff2 <- function(i_seed){ set.seed(i_seed) dt %>% .[, grp := dqsample(id) <= nrow(.) * .5] tidy(t.test(dt[grp==TRUE], dt[grp==FALSE])) %>% mutate(a = dt[grp==TRUE, .N]) } # можно furrr подключать, эксперименты параллелятся tic() res_df <- it_df %>% rowwise() %>% mutate(data = ff2(seeds)) %>% unnest(data) toc()

Ivan-Struzhkov Автор вопроса
Ilya Shutov
Как обычно, начну с типичной фразы "здесь все не т...

Подход понятен, спасибо, вопрос - где лифты обсчитываются? incr надо применять к какой то группе?

Ivan-Struzhkov Автор вопроса
Ilya Shutov
интересно, но ничего не понятно

Ну я не понимаю как представленный код тестирует лифты относительно искомой метрики. Результат кода не очень интерпретируем

Ivan Struzhkov
Ну я не понимаю как представленный код тестирует л...

я показал подход, а не решал конкретную бизнес-задачу, которая не очень очевидна из исходного кода.

Ivan-Struzhkov Автор вопроса
Ilya Shutov
я показал подход, а не решал конкретную бизнес-зад...

Мой вопрос был не в генерации данных. А как итерировать внутри пура по двум направлениям. анлог синтаксиса for (i in ...){ for (j in ...){ }} В ответ я получил небеинтересный кусок кода который позволяет генерировать данные на дататейбле, делая это побыстрее. При этом про итерирование внутри пура у меня знаний не прибавилось.

Ilya Shutov
eхpand_grid дает ответ на первый вопрос

а вы можете раскрыть свой ответ? потому что я вот не понимаю, как expand_grid отвечает на вопрос про итерацию в пурр по двум переменным

Philipp Upravitelev
а вы можете раскрыть свой ответ? потому что я вот ...

for (i in ...){ for (j in ...){ }} дает комбинаторику i x j expand_grid делает ровно это же. а потом итерируем по строкам. я никак не пойму, что именно смущает?

Philipp Upravitelev
а вы можете раскрыть свой ответ? потому что я вот ...

Хорошо, попробую еще раз. for (i in ...){ for (j in ...){ }} дает комбинаторику i x j expand_grid делает ровно это же. а потом итерируем по строкам. В рамках tidyverse для итерации по строкам (держим два параметра в голове) можно использовать: rowwise() map2() pmap() вариант c map2() может оказаться наилучшим, поскольку его потом будет легко распараллелить с помощью furrr. Для прототипирования решения и для маленьких задачек можно воспользоваться rowwise(). Так годится?

Ilya Shutov
Хорошо, попробую еще раз. for (i in ...){ for (j i...

на мой взгляд, вот в этом случае достаточно было бы вот этого комментария, который вы дали выше.

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта