以下玩具代码产生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)
答案 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)
}