#r
#r
Вопрос:
У меня есть большое количество фреймов данных с большим количеством переменных, и мне нужно создать гистограммы для каждой переменной (которые явно называют используемую переменную). Мне нравится иметь их в интерфейсе RStudio (не во всплывающем окне), и мне также нужно, чтобы эти изображения сохранялись в формате JPEG в папке.
У меня есть цикл, который я использую для генерации гистограмм всех переменных, но при этом каждая гистограмма не помечается для каждого элемента, и гистограммы также экспортируются в виде всплывающего окна, а не изображения в RStudio (пример фрейма данных и цикла приведен ниже).
df <- data.frame("ID" = 1:16)
df$A <- c(1,1,1,1,1,1,1,1,1,1,1,14,NA_real_,NA_real_,NA_real_,16)
df$B <- c(10,0,0,0,12,12,12,12,0,14,NA_real_,14,16,16,16,16)
df$C <- c(10,12,14,16,10,12,14,16,10,12,14,16,10,12,14,16)
df_col_names <- df %>% select(A:C) %>% colnames(.)
for(df_col_names in df) {
dev.new()
hist(df_col_names) # subset with [] not $
}
У меня также есть код для создания JPEG для каждой гистограммы, но я не уверен, как выполнить цикл, чтобы создать новое изображение для каждой переменной с именем файла, помеченным именем переменной, и изображением, помеченным именем переменной.
jpeg(filename = "C:\Images\hist.jpg")
hist(df$A, main="A" , xlab="A", breaks = 10)
dev.off()
Ответ №1:
Используйте lapply
для перебора имен столбцов. Подмножество их с помощью [[
, присвоите заголовок и метку оси x графику на основе имени столбца и запишите график в виде изображения.
lapply(df_col_names, function(x) {
jpeg(filename=sprintf('C:\Images\%s.jpeg', x))
hist(df[[x]], main = x, xlab = x, breaks = 10)
dev.off()
})
Это должно создать 3 графика в вашей папке изображений с именами "A.jpeg"
, "B.jpeg"
и "C.jpeg"
.
Ответ №2:
Я понял, что вам нужны гистограммы как в файлах, так и в окне графиков, т. Е. вы хотите получить доступ к нескольким устройствам. Используя dev.copy
, код будет:
op <- par(mfrow=c(1, 3)) #
lapply(names(df)[-1], function(x) {
hist(df[[x]], main=x, xlab=x, breaks=10)
dev.copy(png, filename=paste0("plot_", x, ".png"))
dev.off()
})
par(op) #
Я использую png
то, что лучше для такого рода изображений, иначе просто измените «png» на «jpg».
Если вы предпочитаете, чтобы графики в окне располагались последовательно, а не рядом, оставьте строки с #
.
Данные:
df <- structure(list(ID = 1:16, A = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 14, NA, NA, NA, 16), B = c(10, 0, 0, 0, 12, 12, 12, 12, 0,
14, NA, 14, 16, 16, 16, 16), C = c(10, 12, 14, 16, 10, 12, 14,
16, 10, 12, 14, 16, 10, 12, 14, 16)), row.names = c(NA, -16L), class = "data.frame")