提高 R 代码有效性的技巧

2024-01-11

我正在使用 Reddit 的 API(“Pushshift”)编写一个循环(在 R 中)来抓取 Reddit 帖子。

本质上,我希望每小时获取从现在到 20,000 小时前包含“特朗普”一词的所有评论。 API 将注释存储在 JSON 框架中 - 我在 R 中编写了以下代码来获取这些注释(注意 - 我这样做是为了在每 200 次迭代后保存结果,以防崩溃):

library(jsonlite)

part1 = "https://api.pushshift.io/reddit/search/comment/?q=trump&after="    
part2 = "h&before="
part3 = "h&size=500"

results = list()
for (i in 1:20000)
{tryCatch({
    {
        url_i<-  paste0(part1, i+1,  part2, i,  part3)
        r_i <-  data.frame(fromJSON(url_i))
        results[[i]] <- r_i

myvec_i <- sapply(results, NROW)

print(c(i, sum(myvec_i))) 
       
        ifelse(i %% 200 == 0, saveRDS(results, "results_index.RDS"), "" )
    }
}, error = function(e){})
}
final = do.call(rbind.data.frame, results)
saveRDS(final, "final.RDS")

该代码可以运行 - 但我正在寻找提高该代码的速度和效率的技巧。例如,我注意到:

  • 有时,这段代码在某些迭代上似乎需要很长时间
  • 我还有一种感觉,随着“列表”的规模越来越大,R 的全局环境变得更加完整,事情也在放缓。
  • 有时,网络抓取停止收集新结果(即我添加了一个语句,显示每次迭代收集的结果的累积数量 - 有时,该数字停止更新)
  • 我使用“tryCatch()”来跳过错误以防止循环崩溃 - 但也许有某种方法可以解决这个问题,这可能会导致更多的 Reddit 评论被删除?

有人可以推荐一些关于如何优化和加速此代码的技巧吗?也许有人可以尝试运行这段代码并让我知道他们的想法?

谢谢你!


您可以做两件事:1)在每次迭代时将 data.frame 保存到“.RData 文件”中。执行此操作时,您需要的内存较少,因为您不在 RAM 中存储数据 2) 使用并行计算。这是一个例子:

library(parallel)
library(doParallel)
library(RSelenium)

fn_Par <- function(core_Id, all_Index, list_remDr, nb_Core)
{
  library(jsonlite)
  library(RSelenium)
  remDr <- list_remDr[[core_Id]]
  remDr$open()

  setwd("D:\\")
  part1 <- "https://api.pushshift.io/reddit/search/comment/?q=trump&after="    
  part2 <- "h&before="
  part3 <- "h&size=500"
  
  nb_Index_All <- length(all_Index)
  nb_Id_Per_Core <- floor(nb_Index_All / nb_Core)
  index_To_Extract <- all_Index[(1 + (core_Id - 1) * nb_Id_Per_Core) : min((core_Id * nb_Id_Per_Core), nb_Index_All)]

  for(i in index_To_Extract)
  {
    url_i <-  paste0(part1, i + 1,  part2, i,  part3)
    remDr$navigate(url_i)
    Sys.sleep(0.5)
    web_Obj <- remDr$findElement("css selector", 'body > pre')
    r_i <-  tryCatch(data.frame(fromJSON(web_Obj$getElementText()[[1]])), error = function(e) NA)

    if(is.null(dim(r_i)) == FALSE)
    {
      Sys.sleep(10)
      remDr$navigate(url_i)
      web_Obj <- remDr$findElement("css selector", 'body > pre')
      r_i <-  tryCatch(data.frame(fromJSON(web_Obj$getElementText()[[1]])), error = function(e) NA)
    }
    
    save(r_i, file = paste0(i, "_core_Id_", core_Id, ".RData"))
    Sys.sleep(0.5)
  }
}

nb_CPU <- 4
cluster <- parallel::makeCluster(nb_CPU)
doParallel::registerDoParallel(cl = cluster)

list_remDr <- list()
list_rd <- list()

for(i in 1 : nb_CPU)
{
  print(i)
  port <- as.integer(4444L + rpois(lambda = 1000, 1))
  list_rd[[i]] <- rsDriver(chromever = "105.0.5195.52", browser = "chrome", port = port)
  list_remDr[[i]] <- list_rd[[i]]$client
}

parLapply(cluster, X = 1 : nb_CPU, fun = fn_Par, all_Index = 1 : 2000, list_remDr = list_remDr, nb_Core = nb_CPU)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提高 R 代码有效性的技巧 的相关文章

  • 对于跨域 XHR 丢弃 cookie 不是更简单吗?

    在进行网络开发时 我一直在与奇怪的限制作斗争 其中之一是 AJAX 请求的同源限制 我问自己 在创建请求时丢弃 cookie 而不是阻止对跨域资源的请求是否会更简单 以避免滥用 AJAX 请求的身份验证凭据 浏览器会话 Cookie 是一种
  • 在 R 中按邮政编码绘制美国地图上的点,并插入阿拉斯加和夏威夷

    我正在尝试以密度点格式在美国地图上绘制点 其中每个邮政编码的点的大小根据该邮政编码中从事某种职业的人数而定 我已经非常接近我需要的东西 但正在努力获取阿拉斯加和夏威夷的坐标 它们需要在插图上 这里的第一组代码是我所拥有的 loc full2
  • 生成基于内联 HTML 样式的样式表?

    一段时间以来 我一直致力于对网站的不同部分进行样式设计 但是我尚未将内联样式放入样式表中 我想知道是否存在一个工具可以解析 HTML 文件并从中生成样式表 例如 这是我网站的一个片段 div class block style border
  • 按元素名称组合/合并列表

    我有两个列表 其元素的名称部分重叠 我需要将其逐个元素合并 组合成一个列表 gt lst1 lt list integers c 1 7 letters letters 1 5 words c two strings gt lst2 lt
  • Javascript for 循环和 setTimeout 问题

    所以我认为下面的代码确实很简单 但却变得很令人头疼 它应该是一个循环 将改变对象的不透明度 使其消失 function doSomething var i 10 for i 10 i gt 0 i i 1 setTimeout setOpa
  • 从 Django 基于类的视图的 form_valid 方法调用特殊(非 HTTP)URL

    如果你这样做的话 有一个 HTML 技巧 a href New SMS Message a 点击新短信打开手机的本机短信应用程序并预 先填写To包含所提供号码的字段 在本例中为 1 408 555 1212 以及body与提供的消息 Hel
  • 错误:列索引必须最多为 1,如果... heatmap.2

    我在 heatmap 2 中收到错误 我在这里发现了类似的错误R knnImputation 给出错误 https stackoverflow com questions 45117125 r knnimputation giving er
  • 差异:查看页面源代码与在 Firebug 中查看

    当我查看页面的页面源时 例如 http my sa ucsb edu public curriculum coursesearch aspx http my sa ucsb edu public curriculum coursesearc
  • Knockout.js:有条件绑定div的title属性

    我的页面上有一个 viewModel 它保存一些设备当前状态概述的数据 到目前为止 除了一个问题之外 一切都运行良好 我需要根据 viewModel 中的另一个值设置 div 元素的 title 属性 我知道您基本上可以像这样设置 titl
  • 三角形内的热图

    考虑以下示例 triangle lines lt data frame X c 0 0 1 1 0 5 0 5 Y c 0 0 0 0 1 1 grp c 1 2 1 3 2 3 df lt matrix c c 0 2 0 5 0 8 c
  • 使用 ActiveModel::Serializers 包含两个父 json 数组

    我正在尝试发送如下所示的前端应用程序 json facilities id 5 name happy days ranch location address 1424 Pastoral Lane zipcode 25245 instruct
  • R 版本 4.0.0 上的 ROracle

    当尝试使用 ROracle 时 我收到以下错误消息 gt library ROracle Error package or namespace load failed for ROracle package ROracle was inst
  • 如何在 Scala 中使用 Circe 解码 JSON 列表/数组

    我有代码片段 cursor downField params downField playlist downField items as List Clip 其中 Clip 是字符串和数字的简单 case 类 传入的 Json 应包含一个
  • CSS 列不会水平对齐

    我正在使用列计数来允许我的文本流入两个不同的列 但第一列的顶部 最左边 低于另一列 col moz column count 2 webkit column count 2 column count 2 div h3 Options h3
  • BS3 - img 响应类 - 为什么没有最大高度?

    引导程序 3 包括 img responsive班级 应用这些 css 设置 display block height auto max width 100 为什么没有max height 100 我发现添加这个使得图片的高度也适合 但我不
  • 容器中的等间距 div

    这是我的例子 http jsfiddle net rtCP3 62 http jsfiddle net rtCP3 62 我有 3 个 或更多 div 我想在一个容器中均匀分布 当将 Angular 与 ng repeat 一起使用时 样式
  • 包含多行 LaTeX 方程的 R 帮助页面

    我正在编写 R 包文档roxygen2 我想将以下多行方程插入到帮助页面中 但我的 LaTeX 代码没有被渲染 hello2 description deqn F t begin cases alpha t f L t 1 alpha t
  • JSON 编码和大引号

    我在 PHP 5 的本机实现中遇到了一个有趣的行为json encode 显然 当将对象序列化为 json 字符串时 编码器将清空包含 卷曲 引号的字符串的任何属性 这种类型可能会在启用自动转换的情况下从 MS Word 文档中复制粘贴 这
  • R 中的多面点阵图,例如线框:如何删除条带并添加 1 行字幕

    我使用这种功能 来自iris数据集 model test lt lm Sepal Length Petal Length Sepal Width Petal Width Species 2 data iris gg lt expand gr
  • HTTPS 网站上的 ShareThis 按钮不可点击

    我已将 共享此 按钮添加到我的安全站点 现在单击它们时会产生错误 下面提到了错误 以前有人遇到过这个问题吗 阻止加载混合活动内容 http w sharethis com button buttons js http w sharethis

随机推荐

  • Pybrain交叉验证方法

    我尝试对我的数据使用交叉验证器 但成功率是 0 0 这没有意义 我的数据由具有 5 个连续属性和两个可能的类别的样本组成 y 和 n My code net pybrain tools shortcuts buildNetwork 5 8
  • 从 Postman 中的对象数组中提取值

    我想从 Postman 中的对象数组中提取 Id 值 然后将其设置为环境变量 如果 JSON 响应是一个对象 则以下脚本可以工作 但不适用于对象数组 我的数组只有一个对象 var data JSON parse responseBody p
  • 有没有办法以编程方式读取 Java 中的 .jmod 文件?

    我用 7 zip 打开了一个 jmod 文件 我可以看到内容 我尝试用 ZipInputStream 以编程方式读取它 但它不起作用 有人知道怎么做吗 中没有文档JEP 261 模块系统 https openjdk java net jep
  • QListView 中的 QT4 QstringListModel

    这是我的第一个 QT 问题 我通常是一名 C 程序员 所以请原谅我问了一个愚蠢的问题 我确信有一个非常简单的答案 但我似乎找不到 我想将项目添加到列表中 目前我们假设它们是字符串 我有一个 QListView UI gt listView
  • volley 库中出现 OutOFMemory 错误

    这就是我正在做的 首先进入自定义适配器的构造函数 我初始化了图像缓存和图像加载器 imageCache new BitmapLruCache mImageLoader new ImageLoader newRequestQueue cont
  • KnockoutJS 使用映射插件订阅属性更改

    无论如何 我可以告诉淘汰映射插件订阅所有属性更改调用某个函数吗 我意识到我可以通过这种方式手动订阅属性更改事件 var viewModel name ko observable foo subscribe manually here vie
  • Spring Security 引起:org.springframework.security.config.annotation.AlreadyBuiltException:该对象已被构建

    在我的 Spring Boot 应用程序中 当我在注入 UserDetailService 实现类的服务层类上添加 PreAuthorize hasAuthority ADMIN 时 出现错误 此对象已构建 如果我应用方法安全性 在任何其他
  • IntelliJ 15 与 QueryDSL 和 Gradle

    我在 IntelliJ 15 中有一个使用 gradle 2 3 和 QueryDSL 4 1 3 的 Spring boot 1 4 项目 该项目无法构建 因为我的实体没有被 Querydsl 构建到 Q 类中 我有以下内容 builds
  • MVC 表单模型为复杂对象集合返回 null

    我有一个包含 4 行 移动设备 工作 单元格 电子邮件 和 5 个以上列的表格 当我发布时 我没有取回任何数据 我可以重构代码以使其正常工作吗 Model public class ContactInfoViewModel public s
  • free() 不释放嵌入式 Linux 中的内存。

    我在嵌入式 Linux 中使用 malloc 分配了内存 大约 10 MB 检查可用内存为 67080 kB 但即使使用 free 释放它后 它仍然保持不变 只有在应用程序终止后 内存才再次可用 free 是否不会使释放的内存可供系统使用
  • mysql 查询 PHP:我想将特定项目放在第一位,然后对其余项目进行排序

    我有下表 id car name owner 1 Toyota Jan 2 Ford Mike 3 Isuzu Andrew 4 BMW Jan 5 Ferrari Steve 6 Audi Jan 7 Benz Klark 8 Hyund
  • 将 MS Sql 结果设置为变量并重用它

    目前我的代码是这样的 select from tblReq where ReqID in select ReqID from tblLog where LogDate gt 2015 04 01 and LogDate lt 2015 05
  • F#(或.NET 库)的统计功能

    从事统计工作的人是否可以用 F 代替他的专业程序 我主要考虑SAS SPSS F 中有对它的本机支持吗 我不是在谈论标准差之类的琐碎事情 而是例如项目响应建模 更新 不要让项目响应模型让你失望 我什至不知道 只是我知道他们使用 SPSS 所
  • JavaScript 中的反向事件冒泡

    如您所知 事件通常在 JavaScript 中冒泡 因此首先执行触发事件的元素的事件处理程序 然后调用父元素的事件处理程序 依此类推 这种行为会导致我当前正在处理的项目出现一些问题 我宁愿颠倒执行顺序 我想出了一个使用超时的解决方案 ele
  • 如何使用属性的 getter 方法上的 @XMLElement 覆盖在类级别指定的 JAXB @XMLAccessorType(XMLAccessType.FIELD)?

    在下面的示例代码中 Employee已使用 JAXB 字段级别访问类型指定了类 对于物业dept 但是 访问类型已在 getter 方法级别指定为 XMLElement注解 在编组期间组织类 抛出以下异常 com sun xml inter
  • Spring连接池问题

    我对 Java 和 Spring 没有经验 我尝试编写一个使用 JdbcTemplate 进行数据访问的程序 我使用DBCP池 这里是
  • ObjC、Facebook 页面 - 发布新闻源有效,但发布照片无效

    所以我试图从 iPhone 应用程序在我的 Facebook 页面 我是管理员 上发布照片 我正在使用 FB Sessions 创建会话 获取读取权限 获取管理页面权限 然后 我成功获取我的 Facebook 页面应用程序 ID 因为 FB
  • Android 谷歌云消息传递示例无法正常工作

    我正在关注这里的教程http developer android com google gcm gs html http developer android com google gcm gs html为了设置 GCM 我目前正在尝试注册设
  • AMO OLAP 查询绑定

    根据业务逻辑 有时我需要更改多维数据集中的客户维度的源表 以前我使用以下代码更改多维数据集的结构 MyServerDataSourceView Schema Tables DimCustomers ExtendedProperties Qu
  • 提高 R 代码有效性的技巧

    我正在使用 Reddit 的 API Pushshift 编写一个循环 在 R 中 来抓取 Reddit 帖子 本质上 我希望每小时获取从现在到 20 000 小时前包含 特朗普 一词的所有评论 API 将注释存储在 JSON 框架中 我在