我不能在 r 中使用 tiff() 保存文件 for{}

I can´t save files using tiff() inside for{} in r

所以我有一个大文件,我做了一个循环来计算平均值并做图形:

for (i in c(25:28)) {
  trait <- all_exp_1 %>% 
    group_by(Experiment,time) %>%
    dplyr::summarise(across(i,~data.frame(Mean = mean(.,na.rm=TRUE),
                                          N = length(.),
                                          SD = sd(.,na.rm=TRUE),
                                          Min = min(.,na.rm=TRUE),
                                          Max = max(.,na.rm=TRUE),
                                          Coeff.Variation = sd(., na.rm=TRUE)/mean(., na.rm=TRUE)*100))) %>%
    pivot_longer(-maturacao & -Experimento) %>% ungroup()
  
  file_name = paste("files/plot_",trait[[3]][[1]], ".tiff", sep="")
  

  tiff(file=file_name, width =6 , height = 4, units = 'in', res = 200)
  ggplot(trait,aes(x = maturacao, y =trait$value[[1]], fill = factor(Experimento))) +
    geom_bar(position = "dodge", stat = "identity") +
    theme() +
    labs(fill = "Experiment") +
    xlab('Time')+
    ylab('Size (0 - 100)')
  dev.off()
  
}

例如,对于特征 25 生成此文件:

Experiment time  trait            value$Mean    $N   $SD  $Min  $Max $Coeff.Variation
            0         5  Tenderness              56.2    20  17.9     6    81             31.9
            0        15  Tenderness              68.2    20  22.6     9   100             33.1
            0        25  Tenderness              61.2    20  21.7    12    97             35.4
            1         5  Tenderness              61.3    72  25.0     0   100             40.8
            1        15  Tenderness              65.3    72  21.2     5   100             32.4
            1        25  Tenderness              72.6    72  22.8     8   100             31.4

但是保存的图形是空白的,但是,当我 运行 对 for{} 之外的图形使用相同的代码时,代码可以完美运行。有什么建议吗?

一个解决方案是将您的地块存储在列表中,然后 print() 它们。 看一个小例子:

首先:让我们将地块保存到列表中

library(ggplot2)

list <- list()

for (i in 1:3) {
  
  g <- ggplot(iris, aes(Sepal.Length,Sepal.Width)) +
        geom_point()
  list[[i]] <- g
  
}

现在我们的列表中充满了阴谋。现在,让我们将它们保存到 tiff.

for (i in 1:3) {

  file_name = paste("iris_plot_", i, ".tiff", sep="")
  tiff(file_name)
  print(list[[i]])
  dev.off()
  
}