我是R的新手(以及一般的编程),并且在功能方面遇到了一些麻烦。我正在尝试编写一个函数来绘制给定变量的直方图,并覆盖正常曲线。在这里,我有代码在data
:
dev.new()
ggplot(data,aes(x = variable)) +
geom_histogram(aes(y=..density..),binwidth=.2)+
geom_density(na.rm=TRUE)+
stat_function(fun=dnorm, args=list(mean=mean(data$variable,na.rm=TRUE),
sd=sd(data$variable, na.rm=TRUE)), linetype=4, colour="red")
data
如果我输入特定的variable
和 plotnormal<-function(data,variable){
dev.new()
ggplot(data,aes(x = variable)) +
geom_histogram(aes(y=..density..),binwidth=.2)+
geom_density(na.rm=TRUE)+
stat_function(fun=dnorm, args=list(mean=mean(data$variable,na.rm=TRUE),
sd=sd(data$variable, na.rm=TRUE)), linetype=4, colour="red")}
plotnormal(data, variable)
,此代码可以正常工作,但如果我尝试通过函数传递相同的内容,则不再这样做。例如:
{{1}}
是什么给出的?有没有办法只传递我输入函数的确切文本?
答案 0 :(得分:4)
将字符串变量名称传递给计划在数据框或其他结构的子集中使用该名称的函数时,请使用
data[[variable]]
而不是
data$variable
有关详情,请阅读help(Extract)
此外,您还要使用aes_string()
代替aes()
。然后你的更新功能应该是
plotnormal <- function(data, variable) {
dev.new()
ggplot(data, aes_string(x = variable)) +
geom_histogram(aes(y = ..density..), binwidth = .2) +
geom_density(na.rm = TRUE) +
stat_function(fun = dnorm, args = list(mean = mean(data[[variable]], na.rm = TRUE),
sd = sd(data[[variable]], na.rm = TRUE)), linetype = 4, colour = "red")
}
每隔一段时间按一下空格键也有帮助。