R:如何使用sapply继承colnames属性?

时间:2018-12-08 10:22:53

标签: r sapply

以下玩具代码产生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 :(得分:1)

您是对的,这很有意义: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)
}