2012-12-29 26 views
11

我使用RStudio,R Markdown,Latex和Pandoc来清理数据,构造变量,运行我的分析并报告结果。我对可重复研究的概念很陌生,但我很迷惑。具有很大的意义。可重复研究的自动化文本

动态表格和数字是没有问题的。但是,动态文本正在困扰着我。我可以插入内联代码,说95%的统计数据都是错误的,但我不确定如何以可重现的方式改变我的语言。

例如,如果我有一个对象x = 0.66,并且我想写“3个牙医中的2个使用Crest”?我可以查看x的当前值0.66,并在文本中键入“2的3”,但这是不可重现的。假设我获得新数据并重新运行分析,x变为0.52。我的文本会过时。当然,我可以动态地报告52%的牙医更喜欢佳洁士,但是当一切都以百分比形式报告时,报告会变得过时。

我的想法是,我可以创建函数,我可以在文本中调用,当我想改变写作。举例来说,一个“out.of”功能可以工作。如果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"))...) 

我还可以创建一小部分功能,会做的十分之一,五分之二的类似的东西,一个 - 第三...

我相信别人已经解决了这个问题。任何线索?想法?

+0

这是一个非常有趣的问题,但我认为这将取决于您的可读性限制。比如,你认为“20分之1”还是“25分之1”是有效的选择?你想为更一般的休息时间设置什么样的门槛(比如“五分之二”)?一旦解决了这个问题,我会建议尝试'cut()'并指定标签而不是'ifelse()'。我不认为任何软件包会为你做这件事,但他们应该帮助你达到目标! – A5C1D2H2I1M1N2O1R2T1

+0

谈到代表百分比时,我认为“十分之一”是我想要去的最低点。今年我学到了大量的R(从零的基线),但没有减少()。将研究它。谢谢。 –

+0

那么你将不得不弄清楚什么“超出”类别是最有用的。诸如“9,8,7,6”之类的类别可能不会很方便用户,因为这会对一些精神上试图将这些数字转换回百分比的读者征税。祝你好运! – A5C1D2H2I1M1N2O1R2T1

回答

7

有一个包FRACTION,当你更换/“出”,它可以工作。但是,使用小数位数时的输出很奇怪:

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

@Dieter Menne编辑:忘记这一点,请参阅下面的@Ben Bolker。

+5

你可以通过'MASS :: fractions'解决这个问题:'fraction(0.66,cycles = 3)'(并且'MASS'已经被推荐) –

+0

Krr ....我应该知道,但是可以不记得在哪里找到它。 –

+0

很棒,@BenBolker –