2012-12-29 24 views
11

Sto utilizzando RStudio, R Markdown, Latex e Pandoc per pulire i dati, costruire variabili, eseguire la mia analisi e riportare i risultati. Sono nuovo al concetto di ricerca riproducibile, ma sono appassionato. Ha molto senso.testo automatizzato per la ricerca riproducibile

Le tabelle e le figure dinamiche non sono un problema. Il testo dinamico, tuttavia, mi sta bloccando. Posso inserire il codice inline per dire che il 95% di tutte le statistiche sono false, ma non sono sicuro di come possa variare la mia lingua in modo riproducibile.

Per esempio, cosa succede se ho un oggetto x = 0,66 e voglio scrivere "2 dentisti su 3 usano Crest"? Posso guardare il valore corrente di x, 0,66 e digitare "2 su 3" nel testo, ma questo non è riproducibile. Diciamo che ottengo nuovi dati e rieseguo la mia analisi e x diventa 0,52. Il mio testo non sarebbe aggiornato. Certo, potrei segnalare dinamicamente che il 52% dei dentisti preferisce Crest, ma un rapporto diventa obsoleto quando tutto viene riportato come percentuale.

Il mio pensiero è che potrei creare funzioni che potrei chiamare nel testo quando voglio variare la scrittura. Per esempio, una funzione di "out.of" potrebbe lavorare su se else per produrre il testo:

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"))...) 

potrei anche creare una funzione frazione che avrebbe fatto qualcosa di simile per un decimo, due quinti, un -third ...

Sono sicuro che altri hanno già affrontato questo problema. Qualche vantaggio? Idee?

+0

Questa è una domanda davvero interessante, ma penso che dipenderebbe davvero da quali sono i limiti per la leggibilità. Ad esempio, consideri "1 su 20" o "1 su 25" come opzioni valide? Quale soglia vuoi impostare per le interruzioni più generali (come "2 su 5")? Una volta risolto questo problema, suggerirei di provare 'cut()' e specificare le etichette invece di 'ifelse()'. Non penso che nessuno dei pacchetti lo farà per te, ma dovrebbero aiutarti a arrivarci! – A5C1D2H2I1M1N2O1R2T1

+0

Quando si tratta di rappresentare percentuali, penso che "su 10" sia il minimo che vorrei andare. Ho imparato una tonnellata di R quest'anno (da una linea di base zero), ma non tagliato(). Lo esamineremo. Grazie. –

+0

Quindi dovresti capire quali sono le categorie "fuori" più utili. Categorie come "fuori da {9, 8, 7, 6}" potrebbero non essere molto user friendly dato che questo tasserebbe alcuni lettori che tentano mentalmente di convertire quei numeri in una percentuale. In bocca al lupo! – A5C1D2H2I1M1N2O1R2T1

risposta

7

C'è un pacchetto FRAZIONE e quando si sostituisce/per "fuori", potrebbe funzionare. Tuttavia, l'uscita quando si utilizza il numero di decimali è strano:

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

Edit @Dieter Menne: dimenticare questo, vedere @ Ben Bolker sotto.

+5

potresti essere in grado di aggirare questo con 'MASS :: fractions':' frazioni (0.66, cicli = 3) '(e' MASS' è già consigliato) –

+0

Krr .... avrei dovuto saperlo, ma potrei non ricordo dove trovarlo –

+0

ottimo, @BenBolker –