下面的代码出现错误,我无法理解:FUN(X[[i]],…(中出错:找不到对象"avg_Pressure">原因可能是什么?
data %>%
group_by(Group, Time) %>%
dplyr::summarise(avg_Depression = mean(Depression),
se_Depression = sd(Depression)/sqrt(n())) %>%
ggplot(data = data,
mapping = aes(x = Rumination,
y = Depression,
color = Time,
ymin = avg_Depression - se_Depression,
ymax = avg_Depression + se_Depression)) +
geom_pointrange(size = 1.2, alpha = .6,
position = position_dodge(width = .1)) +
geom_smooth(formula = y ~ x, method = lm, se=F)+
facet_wrap(~Group)+
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())
stefan的注释完全正确。
启动时,data
表示命名对象中的数据。一旦R通过%>% group_by(...)
执行,对象的值和结构就是短暂的,不存在于命名对象中。就像在a <- 5 ; a + 9
中一样,14
从不分配给任何东西。这通常要么稍后显式存储到新对象中
newdata <- data %>%
group_by(...) %>%
summarize(...)
## or less-commonly-seen right-hand assignment
data %>%
group_by(...) %>%
summarize(...) -> newdata
或者被丢弃,只是为了副作用,就像你打算在这里做的那样:
data %>%
group_by(...) %>%
summarize(...) %>%
ggplot(...) + geom_point() + ...
在您的情况下,将数据分组,然后汇总,添加avg_Depression
,然后指定data=data
,引用名为data
的对象的原始内容。这有两个问题:
此处不包括您的新汇总数据。事实上,
ggplot(.)
看不到汇总数据,而是看到原始数据。您没有明确指定管道数据的去向。通常,您可能会看到人们在
.
占位符中为显式/自文档化%>%
管道流编写代码,例如mylm <- mydata %>% group_by(...) %>% summarize(...) %>% lm(A ~ B + C, data = .)
默认情况下,
%>%
管道操作符将上一步(LHS(中的数据放入下一步(RHS(的第一个参数中。但是,如果RHS表达式包含.
占位符,则数据将改为分配给该参数。(这与本机-R|>
管道的工作方式不同,顺便说一句,这里不是一个因素。(但是,因为您没有包含明确的
.
占位符,所以实际发生的情况是:data %>% group_by(Group, Time) %>% dplyr::summarise(avg_Depression = mean(Depression), se_Depression = sd(Depression)/sqrt(n())) %>% ggplot(., data = data, mapping = aes(...)) + ...
这意味着管道数据与
ggplot
的...
(catch-all(参数一起下降。你没有听说这件事,因为从?ggplot2::ggplot
:``` Arguments: data: Default dataset to use for plot. If not already a data.frame, will be converted to one by 'fortify()'. If not specified, must be supplied in each layer added to the plot. mapping: Default list of aesthetic mappings to use for plot. If not specified, must be supplied in each layer added to the plot. ...: Other arguments passed on to methods. Not currently used. ```
CCD_ 18当前未被使用。
底线是,将data=data
更改为data=.
(或者完全删除data=data
(,它应该可以工作:
data %>%
group_by(Group, Time) %>%
dplyr::summarise(avg_Depression = mean(Depression),
se_Depression = sd(Depression)/sqrt(n())) %>%
ggplot(data = ., # change here
mapping = aes(x = Rumination,
y = Depression,
color = Time,
ymin = avg_Depression - se_Depression,
ymax = avg_Depression + se_Depression)) +
geom_pointrange(size = 1.2, alpha = .6,
position = position_dodge(width = .1)) +
geom_smooth(formula = y ~ x, method = lm, se=F)+
facet_wrap(~Group)+
theme_bw() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())