автоматизированный текст для воспроизводимых исследований

Я использую RStudio, R Markdown, Latex и Pandoc для очистки данных, построения переменных, запуска анализа и отчета о результатах. Я новичок в концепции воспроизводимых исследований, но я зацепился. Имеет большой смысл.

Динамические таблицы и рисунки не проблема. Однако динамический текст ставит меня в тупик. Я могу вставить встроенный код, чтобы сказать, что 95% всей статистики ложны, но я не уверен, как я могу изменить свой язык воспроизводимым образом.

Например, что, если у меня есть объект x=0,66, и я хочу написать «2 из 3 стоматологов используют Crest»? Я могу посмотреть на текущее значение x, 0,66, и набрать в тексте "2 из 3", но это не воспроизводимо. Допустим, я получаю новые данные и повторно запускаю свой анализ, и x становится равным 0,52. Мой текст будет устаревшим. Конечно, я мог бы динамически сообщать, что 52% стоматологов предпочитают Crest, но отчет становится устаревшим, если все сообщается в процентах.

Я думаю, что я мог бы создать функции, которые я мог бы вызывать в тексте, когда я хочу изменить написание. Например, функция «out.of» может работать с операторами if else для создания текста:

ifelse(x < 0.09,"fewer than 1 out of 10",
ifelse(x >= 0.09) & x < 0.11,"roughly 1 out of 10",
ifelse(x >= 0.11 & x < 0.15,"slightly more than 1 out of 10",
ifelse(x >= 0.15 & x < 0.19,"nearly 2 out of 5",
ifelse(x >= 0.19 & x < 0.21,"roughly 2 out of 5",
...
ifelse(x >= 0.95 & x < 0.99,"nearly all",
ifelse(x >= 0.99,"all","fubar"))...)

Я также мог бы создать дробную функцию, которая делала бы что-то подобное для одной десятой, двух пятых, одной трети...

Я уверен, что другие уже занимались этой проблемой. Есть зацепки? Идеи?


person Eric Green    schedule 29.12.2012    source источник
comment
Это действительно интересный вопрос, но я думаю, что это действительно будет зависеть от ваших ограничений на читабельность. Считаете ли вы, например, 1 из 20 или 1 из 25 допустимыми вариантами? Какой порог вы хотите установить для более общих перерывов (например, 2 из 5)? Как только это будет решено, я бы предложил попробовать cut() и указать метки вместо ifelse(). Я не думаю, что какой-либо из пакетов сделает это за вас, но они должны помочь вам в этом!   -  person A5C1D2H2I1M1N2O1R2T1    schedule 30.12.2012
comment
Когда дело доходит до представления процентов, я думаю, что из 10 это самое низкое, что я хотел бы выбрать. В этом году я выучил тонну R (с нуля), но не cut(). Рассмотрю это. Спасибо.   -  person Eric Green    schedule 30.12.2012
comment
Итак, вам нужно выяснить, какие из категорий наиболее полезны. Такие категории, как из {9, 8, 7, 6}, могут быть не очень удобными для пользователя, поскольку это обременит некоторых читателей, которые мысленно попытаются преобразовать эти числа обратно в проценты. Удачи!   -  person A5C1D2H2I1M1N2O1R2T1    schedule 30.12.2012


Ответы (1)


Есть пакет FRACTION и при замене / на "out of" он может работать. Однако вывод при использовании числа десятичных знаков странный:

library(FRACTION)
fra(0.66,j=2)
# [1] "33 / 50"
fra(0.66,j=1)
#"7 / 1e+08" 

Отредактировано @Dieter Menne: забудьте об этом, см. @Ben Bolker ниже.

person Dieter Menne    schedule 29.12.2012
comment
вы можете обойти это с помощью MASS::fractions: fractions(0.66,cycles=3)MASS уже рекомендуется) - person Ben Bolker; 30.12.2012