R语言:自定义trends函数选数据框列绘ggplot折线图报错求助
解决ggplot自定义函数的列选择报错问题
我来帮你搞定这个报错!你的代码里有几个关于**非标准评估(NSE)**的细节没处理好,导致R找不到你指定的列,咱们一步步修正:
问题根源分析
- 筛选国家时的硬编码错误:你写的
filter(Countries == 'country')里,'country'是固定字符串,不是你传入的函数参数!R会去匹配名为"country"的国家,而不是你调用时传的'Cameroon'。 - 列选择的语法错误:
select(col = paste0('col'), day, month)这行完全偏离了目标——paste0('col')只会生成字符串"col",根本没用到你传入的col参数;而且select的语法也不对,你需要的是选中col参数指定的列,同时保留day和month。 - ggplot映射的变量引用错误:
aes(x=day, y=col)里的col是字符串变量,但ggplot默认会在数据框里找名为col的列,而不是你传入的'CFR'对应的列。
修正后的完整代码
library(dplyr) library(ggplot2) trends <- function(country, col){ # 筛选指定国家,选择目标列及day、month my_data <- df %>% dplyr::filter(Countries == country) %>% dplyr::select(all_of(col), day, month) my_plot <- ggplot(my_data, aes(x = day, y = .data[[col]])) + geom_line() + facet_wrap(~month) print(my_plot) } # 调用示例 trends('Cameroon', col='CFR')
关键修正点说明
filter(Countries == country):去掉单引号,直接使用参数变量,这样R会用你传入的国家值去筛选数据。select(all_of(col), day, month):用all_of()函数告诉dplyr,你要引用的是col变量中存储的字符串对应的列名,这是处理字符串列名的标准写法。aes(x = day, y = .data[[col]]):使用.data代词+双括号的方式,明确告诉ggplot从数据框中提取col变量指定的列,解决ggplot非标准评估的变量引用问题。
内容的提问来源于stack exchange,提问作者Dezzy7model
相关产品推荐
相关产品推荐

