Ваша большая проблема в том, что вы return(i)
вместо return(plotList)
.Переназначение i
внутри цикла for
с использованием i
, как в итераторе, странно.Особенно, когда график использует i
в качестве строки ... Я бы попробовал это:
histFacet.plot <- function(x, results, info, ...) {
md <- names(x) %in% c("rn","Taxa","year","rep","block","column",
"range", "entity_id")
traits <- names(x[ , !md])
plotList = list()
for (i in traits) {
thisPlot <- ggplot(data = x, aes_string(x = i)) +
geom_histogram(colour="black", fill="white") +
#facet_grid(x$year ~ .) +
theme_bw() +
xlab(i) +
ylab("Frequency") +
theme(panel.grid.major = element_blank()) +
theme(panel.grid.minor = element_blank()) +
theme(axis.text = element_text(size = 15)) +
theme(axis.title = element_text(size = 15)) +
theme(strip.text = element_text(size = 15))
plotList[[i]] = thisPlot
print(i)
}
return(plotList)
}
Не проверено, конечно, поскольку вы не предоставили пример данных.Рад провести тестирование / отладку, если вы предоставите небольшой, воспроизводимый пример набора данных.
Я не совсем уверен, хотите ли вы, чтобы print(i)
печатал график на графическом устройстве (если это так, измените на print(thisPlot)
) или вывести текущую черту на консоль, чтобы обновить ход выполнения цикла (если это так, измените значение на message(i)
, чтобы его было легко отключить).
Несколько других замечаний: если вы не уверены, используйтеyear ~ .
в качестве формулы, а не x$year ~ .
.Если i
уже является символом, то paste0(i)
совпадает с i
(в вашем xlab
).