гистограмма в R с для цикла - PullRequest
0 голосов
/ 06 января 2020

У меня есть набор данных с 74 столбцами, и я пытаюсь создать гистограмму для каждого из них в для l oop. При запуске в консоли мой код в порядке , но когда я пытаюсь связать его, R говорит, что мои данные не нумеруются c. Кто-нибудь знает почему? Я также открыт для других решений этой проблемы построения нескольких гистограмм (с именем столбца в качестве идентификатора на графике). Ниже приведено упрощенное представление моей проблемы.

library(dplyr) 

data2 <- data.frame(c(1,3,5,5,2,2,1,1,1,1),
                    c(2,4,2,3,4,5,1,2,3,3))

colnames(data2) <- c("A", "B")

for (cols in colnames(data2)) {
  data2 %>% select(cols) %>% hist()
}

Опять же, прекрасно работает построчно, но я получаю следующую ошибку, когда пытаюсь связать ее:

" Ошибка в hist.default (.): «X» должно быть числом c Вызовы: ... freduce -> withVisible -> -> Hist -> Hist.default

Выполнение остановлено "

Интересно, что этот код хорошо вяжет:

library(dplyr)

data2 <- data.frame(c(1,3,5,5,2,2,1,1,1,1),
                    c(2,4,2,3,4,5,1,2,3,3))

colnames(data2) <- c("A", "B")

hist(data2$A)
hist(data2$B)

Ответы [ 4 ]

2 голосов
/ 06 января 2020

Вы можете просто использовать lapply.

lapply(data2, hist)

Редактировать: Конечно, вы можете расширить это, как вам нравится, например, заголовки, метки.

op <- par(mfrow=c(1, 2))  # to put histograms side by side
lapply(seq(data2), function(x) 
  hist(x=data2[[x]], xlab=names(data2)[x], main=paste("Histogram", names(data2)[x])))
par(op)  # restore

enter image description here

1 голос
/ 07 января 2020

Спасибо, Грегор. Если людям это интересно, мой окончательный код для сохранения имен столбцов для справки:

for (cols in colnames(data2)) {
  data2 %>% pull(cols) %>% hist(main = cols)
}
1 голос
/ 06 января 2020

select При использовании одного столбца создается фрейм данных из 1 столбца. hist ожидает вектор чисел c, а не фрейм данных. Вместо этого используйте pull, чтобы извлечь столбец как вектор:

for (cols in colnames(data2)) {
  data2 %>% pull(cols) %>% hist()
}

Я также не уверен, что вы имеете в виду под "Мой построчный код работает нормально", я получаю ту же ошибку, принимая код из для l oop (но pull все еще отлично работает):

data2 %>% select(A) %>% hist
# Error in hist.default(.) : 'x' must be numeric
0 голосов
/ 06 марта 2020

Это также может работать в base.R, если хотите.

data2 <- data.frame(c(1,3,5,5,2,2,1,1,1,1),
                    c(2,4,2,3,4,5,1,2,3,3))

colnames(data2) <- c("A", "B")

for(x in names(data2)) {
  hist(data2[,x], main = paste(x, 'distribution' ))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...