2017-01-21 10 views
1

Я новичок в R и мне очень нравится гибкость R Markdown для создания отчетов.R Markdown встраивание функции в простую таблицу

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

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

Это не позволит мне создать таблицу с помощью этого метода?

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

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

Любая помощь будет принята с благодарностью.

+0

Создание и хранение данных в скрытой куске и печатать данные в виде таблицы, когда вы нужно? – A5C1D2H2I1M1N2O1R2T1

ответ

0

Возможно, вам стоит прочитать, как создать рабочий R-код и как закодировать Rmd-файлы, так как ваша функция не работает, и есть несколько мест в документах R Markdown, которые показывают, как это сделать:

--- 
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)` 

генерирует:

enter image description here

Кроме того, ни SO, ни RStudio взимает дополнительную плату за пробелов в кодовых блоков. Было бы неплохо показать студентам хороший стиль кода, пока вы прокладываете дорожки.

+0

Спасибо за помощь! Это отлично работает. Боюсь, я не знаю никакого стиля кода. Я попробую Google, хотя и посмотрю, что я придумал. Спасибо за совет! Редактировать: Я просто руководство Google R Style Guide, и похоже, что мне нужно учиться. Еще раз спасибо. – elliot

0

Вот такой подход, который автоматизирует большую часть генерации отчетов и уменьшает количество кода, который вам нужно ввести. Для начала вы можете превратить это в parameterized report, что упростит создание рабочих листов, используя разные значения x. Вот пример:

В вашем документе rmarkdown вы объявляете параметры x и n в заголовке yaml. n - количество случайных значений, которые вы хотите создать для каждого значения x. В x и n значения в заголовке YAML просто по умолчанию knitr использует, если никакие другие значения не вводятся при визуализации отчета:

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

Затем, в том же rmarkdown документе вы бы текст и код для Вашего Рабочий лист. Вы получаете доступ к параметрам x и n с params$x и params$n, соответственно.

Например, остальная часть документа rmarkdown может выглядеть как код ниже. Мы помещаем x в список под названием x_vals с именованными элементами, так что результирующие имена столбцов на выходе будут именами элементов списка. Мы передаем этот список sapply, чтобы получить столбец n случайных значений для каждого значения x. Весь оператор sapply обернут в kable, который создает таблицу в формате rmarkdown.

```{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))) 
``` 

Теперь вы можете нажать кнопку «вязать» и он будет производить таблицу, используя значения параметров по умолчанию:

enter image description here

Если вместо этого вы хотите использовать различные значения для x и/или n, открыть отдельный файл R сценария и введите следующую команду:

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

в приведенном выше коде,Функциякомпилирует документ rmarkdown, который мы только что создали, но с новыми значениями x и n и сохраняет вывод в файл с именем Worksheet.html. (Я предположил, что мы сохранили rmarkdown документ в файл с именем Worksheet.Rmd.) Вот что вывод выглядит следующим образом:

enter image description here

Вы также можете, конечно, добавить параметры для нижнего и верхнего пределы функции runif, а не жесткого кодирования их как 13,5 и 15,5.

Если вы хотите создать несколько рабочих листов, каждый с различными x значениями, вы можете положить render в цикле:

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

Привет, спасибо! Я получаю несколько сообщений об ошибках, указывающих, что params $ x не существует. Кажется, я ничего не могу сработать. Ниже приведено сообщение об ошибке: Выход из строчек 18-21 (Test_Parameter_Worksheet.Rmd) Ошибка в paste0 ("x =", params $ x): объект 'params' не найден – elliot

+0

Можете ли вы добавить обновление к своему вопросу с документом rmarkdown и сценарием рендеринга, который вы используете? Трудно понять, что происходит, не видя полного кода, который вы используете. – eipi10

+0

Привет, это код, который я запускаю в Mark Down, который дает мне то, что я ищу: '' '{r echo = FALSE} eleven.twelve <- function (x) {x <- runif (n = 1, min = 11, max = 12) round (x, цифры = 2) dollar_format() (x) } – elliot