Я хочу продемонстрировать использование фрагмента кода R.Но я хочу, чтобы сам код был переменным.
Пример двух задач:
- Произвольно выбрать две переменные из фрейма данных и добавить эти столбцы.
- Произвольно выберите набор чисел и вычислите их медиану.
Определенный фрейм данных:
<<echo=FALSE,results='hide'>>=
df <- data.frame(x1 = sample(1:5, 3), x2 = sample(1:5, 3),
x3 = sample(1:5, 3), x4 = sample(1:5, 3))
@
Вот так должен выглядеть окончательный выходной кодпрезентация:
<<foo_chunk,results='markup',echo=TRUE>>=
# You can add two columns by:
s = df$x1 + df$x3
# The median:
median(c(2, 31, 14, 5, 6))
@
В настоящее время я достигаю этого с помощью следующего кода.Но я не могу использовать красивую подсветку кода, доступную для кусков кода knitr:
<<results='asis',echo=FALSE>>=
cn <- sample(colnames(df), 2)
cat("\\# You can add two columns by:\n\n")
cat("s = df\\$", cn[1], " + df\\$", cn[2], "\n\n", sep = "")
x <- sample(1:100, 5)
cat("\\# The median:\n\n")
cat("median(c(", paste0(x, collapse = ", "), "))\n\n", sep = "")
cat("\\#\\#", median(x), "\n")
@
UPDATE:
Я нашел способ захвата вывода, похожий на foo_chunk
выше:
<<echo=FALSE,results='hide'>>=
df <- data.frame(x1 = sample(1:5, 3), x2 = sample(1:5, 3),
x3 = sample(1:5, 3), x4 = sample(1:5, 3))
foo <- function(cn = colnames(df),
x = sample(1:100, 5)) {
return(c(
paste0("# You can add two columns by:"),
paste0("s = df$", cn[1], " + df$", cn[2]),
paste0("# The Median:"),
paste0("median(c(", paste0(x, collapse = ", "), "))")
))
}
@
<<code=capture.output(cat(foo(), sep="\n"))>>=
@
Этот код выдаст выходные данные без каких-либо побочных эффектов (т. Е. Создаст новый временный файл, например "foo.R").
Будем весьма благодарны за любые более эффективные решения.