我正在尝试跟踪ChickWeight
在"独立组T间隔测试"中绘制原始数据的脚本/示例,但仍然遇到stat_summary
函数<的以下错误/ p>
此处重现的代码:
library(datasets)
data(ChickWeight)
library(ggplot2)
g <- ggplot(ChickWeight, aes(x = Time, y = weight,
colour = Diet, group = Chick))
g <- g + geom_line()
g <- g + stat_summary(aes(group = 1), geom = "line", fun.y = mean, size = 1, color = "black")
g <- g + facet_grid(. ~ Diet)
错误讯息:
&#34;stat_summary()
中的计算失败:
&#39;什么&#39;必须是字符串或函数&#34;
错误信息不是很直观,我甚至没有看到&#34;什么&#34;作为stat_summary
文档中的一个参数,我做了一些研究并检查了其他人&#39;答案,但到目前为止还没有具体的答案或解决这个问题。
答案 0 :(得分:5)
原因是您的工作区中有一个名为mean
的变量。所以当你致电stat_summary
...
stat_summary(aes(group = 1), geom = "line", fun.y = mean, size = 1, color = "black")
... R认为你指的是那个变量,而不是{base}包中的mean
函数。
R 通常能够消除函数和其他变量之间的歧义,即使它们具有相同的名称。但是,在这种情况下,消除歧义不起作用,因为您不是直接调用mean
而是将其作为参数传递。解决方案是通过执行以下任一操作,从变量手动消除功能的歧义:
stat_summary
时,请使用完全限定名称base::mean
,而不是mean
。stat_summary
时,请使用match.fun(mean)
代替裸mean
:这将告诉R您要使用功能。答案 1 :(得分:1)
我在尝试为给定的连续变量绘制类别的摘要统计信息时遇到了同样的错误。我的问题是:
ggplot(data = diamonds) +
geom_pointrange(mapping = aes(x = cut, y = depth),
stat = "summary",
fun.ymax = max,
fun.ymin = min,
fun.y = median)
此处不会将函数称为对象。在尝试字符串形式后,这对我有用:
ggplot(data = diamonds) +
geom_pointrange(mapping = aes(x = cut, y = depth),
stat = "summary",
fun.ymax = "max",
fun.ymin = "min",
fun.y = "median")
答案 2 :(得分:0)
这里也有同样的问题。
对我而言,诀窍还在于我需要字符串作为参数。例如:
expBar + stat_summary(fun.y = "sum", geom = "bar", fill = "white", colour = "black")
而不是
expBar + stat_summary(fun.y = sum, geom = "bar", fill = "white", colour = "black")
让它发挥作用。
希望有所帮助,
rikojir
答案 3 :(得分:0)
与geom_smooth(method=lm, se=FALSE, fullrange=TRUE)
类似的问题,我得到了完全相同的错误消息。因为我的全球环境中有 lm 。
只需将lm
更改为"lm"
即可解决问题:
geom_smooth(method="lm", se=FALSE, fullrange=TRUE)