NULL值在foreach循环R中作为符号地址错误传递

Posted

技术标签:

【中文标题】NULL值在foreach循环R中作为符号地址错误传递【英文标题】:NULL value passed as symbol address error in foreach loop R 【发布时间】:2022-01-08 10:55:44 【问题描述】:

我以前从来没有遇到过这个问题,但是当我尝试在 R 中使用 foreach 循环时遇到了这个错误:“ 中的错误:任务 1 失败 - “NULL 值作为符号地址传递”。

我几乎不可能生成一个小的、可重复的示例(我已经尝试过!),因为我试图从巨大的栅格中提取数据并从该数据中制作 csv 文件。但是,这是我的代码。

bi_2021 <- rast('G:\\GridMet_Yearly\\bi_2021.nc')

cl <- makeCluster(2)
registerDoParallel(cl)

r = 1
foreach (r=1:10, .packages = c('tidyverse','lubridate')) %dopar% 
  rc <- row_char[r]
  cc <- col_char[r]
  ce <- cell_char[r]
  rn <- row_num[r]
  cn <- col_num[r]
  fname <- paste0('G:/GridMet_Cells_RawData/row',rc,'_col',cc,'_cell',ce,'.csv')

  data_df <- data.frame(read_csv(fname, show_col_types = FALSE)) # read previous data in
  data_df <- data[which(year(data$Date) < 2021),]

  # add rows for 2021 daily data
  data_df[15342:15673,] <- NA
  data_df$Date[15342:15673] <- seq(as.Date('2021-01-01'),as.Date('2021-11-28'),'days')
  data_df$bi[15342:15673] <- as.numeric(bi_2021[rn,cn,][1:332])  # THIS IS THE LINE IT DOESN'T                                                                                       
                                                                         LIKE!

  write_csv(final_df,paste0('G://GridMet_Cells_RawData2//row',rc,'_col',cc,'_cell',ce,'.csv'))
  rm(data_df,cc,ce,cn,fname,rc,rn)

这是数据样本。

  Date          bi   erc etr_alfalfa fm100 fm1000 etr_grass    pp rhmax rhmin  shum  srad    ud  tmin  tmax   vpd    us
  <date>     <dbl> <dbl>       <dbl> <dbl>  <dbl>     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 1979-01-01    22    16         0.1  18.2   24.5       0.1   0    74.4  38.7  0.14  78.1   232 -40.8 -26.8    20   2.5

由于某种原因,它不允许我从栅格中提取数据,并将其放在每个变量的特定行中。关于它为什么会这样做以及如何解决它的任何想法?当它没有放在 foreach 循环中时,它可以正常工作。谢谢。

【问题讨论】:

【参考方案1】:

您不能直接在并行化中使用 SpatRaster。请参阅this github 问题。某些方法已内置支持(predictapplapptapp),在其他情况下有不同的方法来解决此问题(可能参见this 问题)。

例如,如果您使用此行,它可能会起作用

bi_2021 &lt;- rast('G:\\GridMet_Yearly\\bi_2021.nc')

foreach 循环内。

如果您编辑您的问题并包含一个最小的、独立的、可重现的示例,我可能会为您提供更多帮助。也就是说,使用 R 附带的数据或使用代码生成的数据,删除重现错误所不需要的所有内容,而不是显示对我们没有(也不想拥有)的数据的引用。

【讨论】:

谢谢你,罗伯特。我将切换到使用光栅包。 我应该不难用 terra 实现这样的东西(我提出了一个建议)

以上是关于NULL值在foreach循环R中作为符号地址错误传递的主要内容,如果未能解决你的问题,请参考以下文章

在 foreach 循环中使用 mclapply 出现 R 错误

在 R 中使用 foreach 循环读取 MATLAB .mat 文件时出现问题

淘汰赛 JS 选择初始值在 foreach 循环内未正确显示

如何在“R”中的foreach循环中导出多个函数或包

页脚值在 laravel 的 foreach 中打印相同的数据

PHP - foreach循环中变量之前的&符号[重复]