r-对ggplot2中的xlab参数使用colnames(),在使用lapply时返回NA



我正试图创建一个函数,使用以下函数绘制数据帧中的多列(总共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) 

我们可以将列名转换为symbols并使用(!!(进行评估

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) 

最新更新