Использование цикла for для создания трех смежных графических полей для каждой из числовых переменных фрейма данных

#r #dataframe #for-loop #boxplot

#r #фрейм данных #цикл for #прямоугольная диаграмма

Вопрос:

Я пытался создать «цикл for». Я хотел перебирать различные столбцы фрейма данных «iris», создавая таким образом прямоугольную диаграмму для каждой числовой переменной в зависимости от переменной «species» (которая является символьной). Блок-графики должны быть вместе (3 смежных друг с другом). Я считаю, что с моим использованием функции par() также что-то не так.

Спасибо!

 mybp<-NULL
par(mfrow = c(1,3))
for (i in colnames(iris)){
  if (class(iris[,i]) == 'numeric'){
  par(mfrow = c(1,3))
  mybp<-boxplot(data=iris, iris[, i]~Species, main="variable by flower species", col=c("green","blue","red"))
  }
}
mybp
  

Ответ №1:

Другой вариант:

 names(which(sapply(iris, is.numeric) == TRUE)) -> x #numeric columns 
par(mfrow = c(1,length(x)))

for (i in 1:length(x)) {
  
  boxplot(data=iris, iris[, x[i]] ~ Species, main="variable by flower species", col=c("green","blue","red"), ylab = x[i])
  
}
  

введите описание изображения здесь

Ответ №2:

Существует четыре числовых столбца, поэтому вы можете использовать четыре смежных графика друг с другом.

Вы можете сделать это проще, чем в for цикле. names(iris)[sapply(iris, is.numeric)] Здесь указаны имена столбцов числовых столбцов. Затем внешний sapply цикл перебирает эти имена и создает boxplot s. Используя reformulate , вы получаете формулу для каждой итерации, например Sepal.Length ~ Species , для первой.

Для общего заголовка мы используем title .

 op <- par(mfrow = c(1,4))

sapply(names(iris)[sapply(iris, is.numeric)], function(y) 
  boxplot(reformulate("Species", y), iris, col=2:4))
title("Variable by flower species", line=-2.5, outer=TRUE, cex.main=2, font.main=2)

par(op)
  

введите описание изображения здесь

Однако вы также можете исправить свой for цикл. Вам не нужно ничего назначать в цикле:

 for (i in colnames(iris)) {
  if (class(iris[,i]) == 'numeric'){
    boxplot(data=iris, iris[, i] ~ Species, main="variable by flower species",
                  col=c("green","blue","red"))
  }
}