我正试图创建一个函数,使用以下函数绘制数据帧中的多列(总共36列(:
big5p1 <- function(i) {
ggplot(big5_pos, aes(x= i, y = title)) +
geom_bar(stat="identity", width=0.5) +
xlab(colnames(big5_pos)[i]) + #Issues with NAs
ylab("Position") +
geom_vline(xintercept = mean(i), color="red")
}
lapply(big5_pos[2:3], big5p1)
当我检查colnames(big5_pos[2:36])
时,我确实得到了每列的正确字符名称列表。然而,当使用apply时,只有一些xlabs被正确打印,其余的只有NA作为标签。不确定我忽略了什么,但任何帮助或建议都将不胜感激!
更改函数以接受列名。
library(ggplot2)
big5p1 <- function(i) {
ggplot(big5_pos, aes(x = .data[[i]], y = title)) +
geom_bar(stat="identity", width=0.5) +
xlab(i) +
ylab("Position") +
geom_vline(xintercept = mean(big5_pos[[i]], na.rm = TRUE), color="red")
}
result <- lapply(names(big5_pos)[2:3], big5p1)
我们可以将列名转换为sym
bols并使用(!!
(进行评估
library(ggplot2)
big5p1 <- function(nm) {
ggplot(big5_pos, aes(x = !! rlang::sym(nm), y = title)) +
geom_bar(stat = "identity", width = 0.5) +
xlab(nm) +
ylab("Position") +
geom_vline(xintercept = mean(big5_pos[[nm]], na.rm = TRUE), color="red")
}
然后在列名上循环
result <- lapply(names(big5_pos)[2:3], big5p1)