2017-01-21 6 views
1

Ich bin neu in R und ich bin wirklich die Flexibilität von R Markdown, um Berichte zu erstellen.R Markdown Einbetten einer Funktion in eine einfache Tabelle

Mein Problem ist, dass ich eine Zufallsgenerierungsfunktion verwenden möchte, die ich meine Tabellen erstellt habe. Ich mag einfache Tabellen-String-Header und die folgende Funktion ein:

> ran<-function(x){ 
+  x<-runif(n=1, min=13.5,max=15.5) 
+  round(x, digits=2)}. 

Es wird mir nicht erlauben, eine Tabelle mit dieser Methode zu schaffen?

```{r} 
String |String |String 
-------|------|------ 
ran(x)|ran(x)|ran(x) 
``` 

Mein Ziel ist es Praxis Arbeitsblätter mit einfachen Statistiken zu erstellen, die anders sein wird, aber innerhalb eines begrenzten Integer-Bereich - so kann ich fragen, Follow-up-Fragen mit einer gewissen Vorstellung von dem Mittelwert, Median usw.

Jede Hilfe würde sehr geschätzt werden.

+0

erstellen und die Daten in einer versteckten Klumpen speichern und die Daten als Tabelle drucken, wenn Sie müssen? – A5C1D2H2I1M1N2O1R2T1

Antwort

0

Vielleicht sollten Sie lesen, wie Sie arbeiten R-Code und wie man Rmd-Dateien, da Ihre Funktion nicht funktioniert und es gibt ein paar Stellen in der R Markdown-Dokumente, die zeigen, wie dies zu tun:

--- 
output: html_document 
--- 

```{r echo=FALSE} 
ran <- function(x) { 
    runif(n=1, min=13.5, max=15.5) + round(x, digits=2) 
} 
``` 

One  |Two   |Three 
-----------|-------------|----------- 
`r ran(2)` | `r ran(3)` | `r ran(4)` 
`r ran(2)` | `r ran(3)` | `r ran(4)` 
`r ran(2)` | `r ran(3)` | `r ran(4)` 
`r ran(2)` | `r ran(3)` | `r ran(4)` 

erzeugt:

enter image description here

auch weder SO noch RStudio Kosten für Räume in Codeblöcke sichern. Es wäre gut, den Schülern einen guten Code-Stil zu zeigen, während man Statistik-Tracks einlegt.

+0

Danke für Ihre Hilfe! Das funktioniert großartig. Ich fürchte, ich kenne keinen guten Code-Stil. Ich werde Google aber ausprobieren und sehen, was ich daraus mache. Danke für den Tipp! Edit: Ich habe nur Google R Style Guide und es sieht so aus, als müsste ich lernen. Danke noch einmal. – elliot

0

Hier ist ein Ansatz, der einen Großteil der Berichterstellung automatisiert und die Menge an Code reduziert, die Sie eingeben müssen. Für den Anfang können Sie dies in eine parameterized report verwandeln, die es einfacher machen würde, Arbeitsblätter mit verschiedenen Werten von x zu erstellen. Hier ein Beispiel:

In Ihrem Rmarkdown-Dokument würden Sie die Parameter x und n im yaml-Header deklarieren. n ist die Anzahl der zufälligen Werte, die Sie für jeden Wert von x produzieren möchten. Die x und n Werte im yaml Header sind nur die Standardwerte knitr verwendet, wenn keine andere Werte eingegeben werden, wenn Sie den Bericht machen:

--- 
output: html_document 
params: 
    x: !r c(1,5,10) 
    n: 10 
--- 

Dann in dem gleichen rmarkdown Dokument würden Sie den Text und Code haben für Ihre Arbeitsblatt. Sie erreichen die Parameter x und n mit params$x bzw. params$n.

Zum Beispiel könnte der Rest des Rmarkdown-Dokuments wie der folgende Code aussehen. Wir setzen x in eine Liste namens x_vals mit benannten Elementen, so dass die resultierenden Spaltennamen in der Ausgabe die Namen der Listenelemente sind. Wir geben diese Liste an , um eine Spalte von n zufällige Werte für jeden Wert von x zu erhalten. Die gesamte sapply-Anweisung ist in kable eingeschlossen, die eine Tabelle im Rmarkdown-Format erstellt.

```{r, include=FALSE} 
library(knitr) 
``` 

```{r, echo=FALSE} 
# Create a named list of the x values that we passed into this document 
x_vals = as.list(setNames(params$x, paste0("x=", params$x))) 

kable(sapply(x_vals, function(i) round(runif(params$n, 13.5, 15.5) + i, 2))) 
``` 

Sie können nun auf die Schaltfläche „stricken“ und es wird eine Tabelle mit den Standardparameterwerte erzeugen:

enter image description here

Wenn Sie stattdessen unterschiedliche Werte für x und/verwenden möchten oder n, öffnen Sie eine separate R Script-Datei und geben Sie den folgenden:

rmarkdown::render("Worksheet.Rmd", 
        params = list(x = c(2,4,6,8), 
           n = 5), 
        output_file="Worksheet.html") 

In dem obigen Code, der render Funktion kompiliert das gerade erstellte rmarkdown-Dokument mit den neuen Werten x und n und speichert die Ausgabe in einer Datei mit der Bezeichnung Worksheet.html. (Ich bin davon ausgegangen, dass wir die rmarkdown Dokument in einer Datei Worksheet.Rmd genannt gespeichert haben.) Hier ist, was die Ausgabe wie folgt aussieht:

enter image description here

Sie können natürlich auch, fügen Sie Parameter für die unteren und oberen Grenzen der runif-Funktion, anstatt sie als 13.5 und 15.5 hart zu kodieren.

Wenn Sie mehrere Arbeitsblätter erstellen möchten, die jeweils mit unterschiedlichen x Werten können Sie render in einer Schleife setzen:

df = expand.grid(1:3,5:6,10:11) 

for (i in 1:nrow(df)) { 
    rmarkdown::render("Worksheet.Rmd", 
        params = list(x=unlist(df[i,]), n=10), 
        output_file=paste0(paste(unlist(df[i,]),collapse="_"),".html")) 
} 
+0

Hallo Danke dafür! Ich erhalte mehrere Fehlermeldungen, die angeben, dass die Parameter $ x nicht existieren. Ich kann scheinbar nichts zur Arbeit bringen. Hier ist die folgende Fehlermeldung: Beenden von Zeilen 18-21 (Test_Parameter_Worksheet.Rmd) Fehler in paste0 ("x =", Parameter $ x): Objekt 'Parameter' nicht gefunden – elliot

+0

Können Sie ein Update zu Ihrer Frage hinzufügen mit dem rmarkdown-Dokument und dem Rendering-Skript, das Sie verwenden? Es ist schwer zu wissen, was schief läuft, ohne den vollständigen Code zu sehen, den Sie gerade ausführen. – eipi10

+0

Hallo, das ist der Code, den ich in Mark Down laufen lasse, der mir das gibt, wonach ich suche: '' '{echo echo = FALSE} eleven.twelve <- function (x) {x <- runif (n = 1, min = 11, max = 12) rund (x, Ziffern = 2) dollar_format() (x) } – elliot