找不到在 ggplot() for 循环中强制评估的方法

问题描述 投票:0回答:0

我是 R 语言的新手,但我发现它非常有用。我需要对数据集进行多次回归(按年),但如果我可以访问更多年份,我希望我的代码灵活。所以我决定制作一个 for 循环来绘制我的回归。我已经阅读了 ggplot() 的 for 循环中的惰性评估,我试图在我的 stat_function 图中使用 args=list(x=x,y=y ...) 来强制评估,但我遇到了以下错误,我可以搞不懂为什么会弹出(我在函数外跑过测试,没问题)。这是我的(简化的)代码(我在循环的每个步骤中实际上有 4 个回归,但我删除了它们以便更好地理解):

y_range = 2018:2021
py <- ggplot()
fun_l <- function(x,a,b){return(a*x+b)}
for (y in y_range) {
  dfy <- data_final[data_final$annee == y,]
  dfywehi <- dfy[dfy$weekend == 1 & dfy$temp > 16,]
  fitywehi <- lm(conso~temp,data = dfywehi)
  if (y > 2018) {
    py <- py + ggplot()
  }
  py <- py + 
    geom_point(data=dfywehi,aes(x=temp, y = conso),colour = brewer.pal(4,"Dark2")[1])+
    stat_function(fun=fun_l,geom="line",xlim=c(16,max(data_final$temp),args=list(a=fitywehi$coefficients[['temp']],b=fitywehi$coefficients[['(Intercept)']])),color=brewer.pal(4,"Dark2")[1]) 
}

我有以下错误

1: Computation failed in `stat_function()`
Caused by error in `is.finite()`:
! méthode par défaut indisponible pour le type 'list' 
# ! default method not implemented for type 'list'

我尝试使用 args,force()。我看过的大多数主题都是关于 for 循环变量的(在我的例子中是 y 但我的例子在某种意义上有所不同,因为在每一步我都计算一个回归并且我不访问我的系数关于明确地到 y 值但到临时变量 fitywehi。我考虑过将我的所有数据逐年存储在一个表中并运行一个 lapply 函数,但我认为代码会变得非常不可读,但也许这是正确的解决方案。我只是想知道我是否可以做到“更简单” " 方式。而且大多数主题都使用 aes_() 来解决问题,但它似乎不适用于我这里。

我真的试图在这个论坛和其他地方寻找任何东西,但我无法弄清楚为什么我有这个错误。如果有人能帮助我,我将不胜感激!如果需要,我会提供任何其他信息!

最好的,

雨果

r for-loop ggplot2 lazy-evaluation
© www.soinside.com 2019 - 2024. All rights reserved.