楼主: huapeng66
1786 2

[问答] 如何在R中优化循环语句和多线程运行? [推广有奖]

  • 6关注
  • 0粉丝

博士生

47%

还不是VIP/贵宾

-

威望
0
论坛币
5217 个
通用积分
7.0196
学术水平
3 点
热心指数
4 点
信用等级
2 点
经验
24876 点
帖子
133
精华
0
在线时间
320 小时
注册时间
2018-9-16
最后登录
2023-3-21

楼主
huapeng66 学生认证  发表于 2020-9-12 08:54:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
   如题,读取大量文件时多次使用for循环将降低效率,主要遇到以下几个问题:(1)读取多层文件夹的数据,除了循环有什么比较好用的方法?
(2)读入json文件和提取数据、写入数据时有什么比较高效的办法?能否考虑减少循环和多线程运行?
(3)将结果df_all用RMySQL包中的dbWriteTable(con1,"data_test",df_all,overwrite=TRUE)写入MySQL数据库时,中文出现乱码,尝试使用了dbSendQuery(con1,"set names utf8")转化,还是未解决。
   以下是我用比较笨的方法写的,可以正常运行,请问如何优化代码,可以提高效率。R如果使用多线程,有什么推荐的好方法,谢谢!代码如下:
  1. library(jsonlite)
  2. Indexnames <- c("publication_number","earliest_publication_date","title","title_zh_cn","title_en",
  3.                 "abstract","abstract_zh_cn","abstract_en","applicants_address","applicants_countries" )
  4. M <- length(Indexnames)
  5. setwd('E:/tempdata/data/')
  6. filenames <- dir()
  7. df_all <- data.frame()
  8. for (h in filenames){
  9.   filenames_1 <- dir(paste0(h,'/'))
  10.   for (j in filenames_1){
  11.     file_list <- dir(paste0(h,'/',j,'/'))
  12.     file_list <- file_list[grepl("patent",file_list)]
  13.     for (k in file_list){
  14.       data <- jsonlite::stream_in(file(paste0(h,'/',j,'/',k)))
  15.       N <- NROW(data)
  16.       df_empty <- data.frame(matrix(ncol = M , nrow = N ,dimnames = list(c(),Indexnames)))
  17.       for (i in 1:N){
  18.         df_empty[i,1] <- data[i,"publication_number"]
  19.         df_empty[i,2] <- data[i,"earliest_publication_date"]
  20.         df_empty[i,3] <- data[i,3][[1]][1]
  21.         df_empty[i,4] <- data[i,3][[2]][1]
  22.         df_empty[i,5] <- data[i,3][[3]][1]
  23.         df_empty[i,6] <- data[i,4][[1]][1]
  24.         df_empty[i,7] <- data[i,4][[2]][1]
  25.         df_empty[i,8] <- data[i,4][[3]][1]
  26.         df_empty[i,9] <- data[i,5][[1]]$address[1]
  27.         df_empty[i,10] <- data[i,5][[1]]$countries
  28.       }
  29.       rm(data)
  30.       df_all <- rbind(df_all,df_empty)
  31.     }
  32.   }
  33. }
复制代码






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:循环语句 多线程 Library rmysql SQL数据库

沙发
卫队000 在职认证  发表于 2020-9-12 17:57:38
开并行计算

藤椅
tiesuoqiao 发表于 2020-9-12 22:05:52
并行计算没必要自己做,如果能接受低版本R (3.5.3) 下载一个microsoft r open就行了,否则,安装windows store里的ubuntu然后安装R 4.0 和Intel的MKL库也达到一样的效果

都可以实现自动并行计算

我试过,在Microsoft R Open下,自己设置并行计算并没有什么速度改进,因为早就自动做了。
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-23 15:58