如何在R语言for循环中从列表传递变量名绘制直方图?
解决for循环中根据变量名列表绘制直方图的问题
你遇到的错误是因为df$l[i]的写法不对——$符号后只能直接写列名,不能用变量。当你用df$l时,R会试图找数据框中名为l的列,但你的数据框里根本没有这一列,所以提取出的内容不是数值型,导致hist()函数报错。
修正方法很简单,改用方括号索引来提取对应列,有两种常用写法:
方法一:使用双括号[[ ]]
双括号可以直接通过字符串变量提取数据框的列,是最直接的方式:
df = data.frame(v1=rnorm(100), v2=2*rnorm(100), v3=3*rnorm(100)) l <- c("v1","v2") for (i in 1:2){ # 用l[i]对应的列名提取数据 hist(df[[l[i]]], xlab = paste("数值分布:", l[i]), breaks = 5) }
方法二:使用逗号分隔的索引df[, 列名/位置]
这种方式也能通过字符串变量指定列,适合习惯矩阵索引写法的场景:
df = data.frame(v1=rnorm(100), v2=2*rnorm(100), v3=3*rnorm(100)) l <- c("v1","v2") for (i in 1:2){ hist(df[, l[i]], xlab = paste("数值分布:", l[i]), breaks = 5) }
注:我把xlab改成了带变量名的内容,这样两个直方图的标签能区分开,比统一的"Some X label"更实用。
内容的提问来源于stack exchange,提问作者Pam G
相关产品推荐
相关产品推荐

