knitr: как напечатать видимые части выражения в пользовательском фрагменте кода, используя engine_output ()? - PullRequest
1 голос
/ 19 февраля 2020

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

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

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

Примером того, что я пытаюсь сделать, было бы что-то вроде:

```{r}
custom_engine <- function(options) {
  c = options$code
  pasted <- paste(c, collapse = "\n")
  code <- parse(text = pasted)

  result = lapply(code, eval, envir = .GlobalEnv)
  knit_print(result)
  engine_output( options, code = c, out = NULL )
}

knitr::knit_engines$set(mmm = custom_engine)
```


```{r}
speed_data <- data.frame( 
    speed = rlnorm(100, log(200), 1), 
    device = sample(c("smartphone", "laptop", "tablet"), 100, TRUE, prob= c(0.1, 0.65, 0.25)) 
  )

median = median(speed_data$speed)
iqr = IQR(speed_data$speed, na.rm=TRUE)
```


```{mmm}
result_analysis <- speed_data %>% 
  filter(speed < median + 3 * iqr & speed > 10) %>% 
  filter(device != "smartphone")

result_analysis
```

Я хотел бы, чтобы приведенный выше код печатал таблицу один раз и в формате knit_print () по умолчанию, как это делает RMarkdown.

Любые предложения приветствуются.

...