r-FUN(X[[i]],..)中的错误:在ggplot中找不到对象



下面的代码出现错误,我无法理解: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的对象的原始内容。这有两个问题:

  1. 此处不包括您的新汇总数据。事实上,ggplot(.)看不到汇总数据,而是看到原始数据。

  2. 您没有明确指定管道数据的去向。通常,您可能会看到人们在.占位符中为显式/自文档化%>%管道流编写代码,例如

    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())

最新更新