R并行编程运行报错“could not find function "%>%"”求解决方案
错误根因
你开启并行计算后,子进程不会自动继承主进程已经加载的dplyr包,而自定义函数df_acast、df_proc内部都用到了dplyr提供的%>%管道符,子进程运行时找不到该函数因此报错。
可行解决方案
优先推荐使用方案1,改动量最小且不会破坏原有代码结构,三种方案任选其一即可:
- 方案1:在并行参数中指定需要加载的包
修改df_proc函数中plyr::daply调用行,添加.paropts参数声明要加载的依赖包,如果你用到lubridate相关函数也可以一并添加:
dfa <- plyr::daply(df[c("lon", "lat", "event_no", col_choice)], c("event_no"), df_acast, .parallel = T, lon_lat = lon_lat, .paropts = list(.packages = c("dplyr", "lubridate")))
- 方案2:在自定义函数内部显式加载依赖包
在df_acast和df_proc函数的第一行都加上加载dplyr的语句,子进程调用函数时会自动加载:
df_acast <- function(df, lon_lat){ library(dplyr) library(lubridate) # 后续原有代码保持不变 } df_proc <- function(df, col_choice){ library(dplyr) # 后续原有代码保持不变 }
- 方案3:显式指定管道符的所属包
把所有用到%>%的地方替换为显式引用写法,不需要调整包加载逻辑:
res <- df `dplyr::%>%` dplyr::right_join(lon_lat, by = c("lon", "lat")) `dplyr::%>%` dplyr::arrange(lon, lat)
内容的提问来源于stack exchange,提问作者Sudhansu Baranwal
相关产品推荐
相关产品推荐

