R: Как перенести атрибут colnames с помощью sapply? - PullRequest
0 голосов
/ 08 декабря 2018

Следующий игрушечный код дает график плотности для каждого столбца y-кадра.Однако sapply не переносит атрибуты имени столбца.Я хотел бы назвать каждый новый график с именем столбца, из которого поступают данные.Любая помощь приветствуется!

y <- data.frame(sample(1:50), sample(1:50), sample(1:50))
colnames(y) <- c("col1", "col2", "col3")

toy.func <- function(y) {
  X11()
  plot = plot(density(y), main = colnames(y))
  return(plot)
}

result <- sapply(y, toy.func)

1 Ответ

0 голосов
/ 08 декабря 2018

Вы правы, и это имеет смысл: y рассматривается как список, а sapply перебирает его элементы, которые являются векторами, и мы не можем присвоить имя вектору.Итак, несколько минимальное отклонение от вашего подхода, при котором достигается то, что вы хотите, состоит в том, чтобы использовать mapply:

toy.func <- function(y, name) {
  X11()
  plot = plot(density(y), main = name)
  return(plot)
}
mapply(toy.func, y, colnames(y))

Он применяется toy.func, беря один элемент из y и один из colnames(y)на каждом шаге.


Другой вариант заключается в одновременном просмотре имен столбцов с предоставлением фрейма данных

toy.func <- function(name, data) {
  X11()
  plot = plot(density(data[, name]), main = name)
  return(plot)
}
sapply(colnames(y), toy.func, y)

Также обратите внимание, что ваша функция может быть упрощена дов этом случае

toy.func <- function(name, data) {
  X11()
  plot(density(data[, name]), main = name)
}
...