Я пытаюсь использовать функции, чтобы сократить количество строк кода, но мой вывод не такой чистый, как хотелось бы. В частности, при возврате нескольких элементов из функции (путем создания списка и использования return
) R также выводит то, что я считаю индексирующими числами (например, [[1]][[1]][[1]]
). Чтобы мой документ с уценкой был чище и читабельнее, я бы хотел удалить эти маленькие цифры.
Есть мысли, как это сделать? Осмотр ТАК меня никуда не привел. cat () здесь не работает, так как я пытаюсь вернуть график и таблицу.
Пример с использованием набора данных iris (с пакетами ggplot2, dplyr и kableExtra):
data(iris)
TypeLoop <- function(fun) {
all <- fun(c("setosa","versicolor","virginica"),"All")
set <- fun("setosa","Setosa")
vers <- fun("versicolor","Versicolor")
virg <- fun("virginica","Verginica")
out <- list(all,set,vers,virg)
return(out)
}
PlotNTable <- function(type,name) {
myplot <- ggplot(iris,aes(Sepal.Length)) +
geom_histogram(data=filter(iris, Species %in% type),color="white",fill="darkblue") +
labs(x="Sepal Length", y="Frequency",
title=paste(name,": Sepal Length"))
sep.table <- iris %>%
filter(Species %in% type) %>%
group_by(Sepal.Length) %>%
summarize("Less than 6" = sum(Sepal.Length<6),
"6 to 7" = sum(Sepal.Length<7 & Sepal.Length>=6),
"More than 7" = sum(Sepal.Length>7))
mytable <- kable(sep.table, caption = paste(name,": Sepal Length")) %>%
kable_styling(c("striped","bordered","hover")) %>%
column_spec(1, bold = T)
#Make the function return both objects
out <- list(myplot,mytable)
return(out)
}
#Return the plots and tables
TypeLoop(PlotNTable)
Я включил опцию results='asis'
в верхнюю часть фрагмента кода, чтобы он действительно связал документ уценки.
Кроме того, я новичок в R, поэтому, если вы видите красные флажки / избыточности / дайте мне знать, как лучше делать то, что я пытаюсь делать в этом коде!