如何加速 R for 循环?

2024-05-13

我正在为 R 中 GWmodel 包中的 gwr.basic 函数运行以下 for 循环。我需要做的是收集任何给定带宽的估计参数的平均值。

代码如下:

library(GWmodel)
data("DubVoter")
#Dub.voter


LARentMean = list()
for (i in 20:21)
{
gwr.res <- gwr.basic(GenEl2004 ~ DiffAdd + LARent + SC1 + Unempl + LowEduc + Age18_24 + Age25_44 + Age45_64, data = Dub.voter, bw = i,  kernel = "bisquare", adaptive = TRUE, F123.test = TRUE)
a <- mean(gwr.res$SDF$LARent)
LARentMean[i] <- a
}
outcome = unlist(LARentMean)

> outcome
[1] -0.1117668 -0.1099969

然而,它返回结果的速度非常慢。我需要更宽的范围,例如 20:200。有没有办法加快这个过程?如果没有,如何设置步进范围(假设为 20 到 200,步长为 5)以减少操作次数?

我是一个刚接触 R 的 Python 用户。我读到 R 因 for 循环速度慢而闻名,并且有更有效的替代方案。欢迎对这一点进行更明确的说明。


我和@musically_ut有同样的印象。 for循环和传统循环for-vs.apply辩论在这里不太可能对你有帮助。如果您有多个核心,请尝试并行化。有几个包,例如parallel or snowfall。哪个包最终是最好和最快的取决于您的机器和操作系统。

在这里,最好并不总是等于最快。跨平台运行的代码比一点额外的性能更有价值。此外,透明度和易用性比最大速度更重要。话虽这么说,我非常喜欢标准解决方案,并建议使用parallel它随 R 一起提供,可在 Windows、OSX 和 Linux 上运行。

编辑:这是使用OP示例的完全可重现的示例。

library(GWmodel)
data("DubVoter")

library(parallel)

bwlist <- list(bw1 = 20, bw2 = 21)


cl <- makeCluster(detectCores())

# load 'GWmodel' for each node
clusterEvalQ(cl, library(GWmodel))

# export data to each node
clusterExport(cl, varlist = c("bwlist","Dub.voter"))

out <- parLapply(cl, bwlist, function(e){
 try(gwr.basic(GenEl2004 ~ DiffAdd + LARent + SC1 +
 Unempl + LowEduc + Age18_24 + Age25_44 +
 Age45_64, data = Dub.voter,
 bw = e,  kernel = "bisquare",
 adaptive = TRUE, F123.test = TRUE  ))

} )


LArent_l <- lapply(lapply(out,"[[","SDF"),"[[","LARent")
unlist(lapply(LArent_l,"mean"))

# finally, stop the cluster
stopCluster(cl)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何加速 R for 循环? 的相关文章

  • 使用“kde”函数进行 R 中的 5-D 核密度估计

    我想通过使用 R 的 ks 库中的 kde 函数来执行 5 维数据 x y z 时间 大小 的核密度估计 在它的手册中 它说它可以执行核密度估计1 至 6 维数据 手册第 24 页 http cran r project org web p
  • rgdax(coinbase)数据未按预期收集数据

    我正在尝试使用rgdaxR 包用于下载一些历史价格 我设置了 API 密钥等 并尝试在过去 24 小时内加载 start lt strftime Sys time Y m dT H M SZ tz UTC end lt strftime S
  • R中的预测和预测函数之间的区别

    两者之间有什么区别吗predict and forecast R 中的函数 如果是 在哪些具体情况下应该使用它们 Intro predict 适用于多种 R 对象 模型 基础库的一部分 forecast 对于时间序列 预测包的一部分 参见示
  • 使用 != 子集 data.table 也排除 NA

    我有一个 data table 其中有一列NAs 我想删除该列具有特定值的行 恰好是 然而 我的第一次尝试导致我失去了行NA还有 gt a c 1 NA gt x lt data table a x a 1 1 2 3 NA gt y lt
  • 在 R 中根据时间序列数据制作 3D 曲面

    我有一个大型数据集 我想从中制作 3D 表面 我希望 x 轴为日期 y 轴为时间 24 小时 z 轴 高度 为我的值 我是 R 初学者 所以越简单越好 http www quantmod com examples chartSeries3d
  • R:从本地 tar.gz 安装 R 软件包时找不到“make”

    R 包ConvCalendar不再位于 Cran 存储库中 请参阅here https cran r project org web packages ConvCalendar index html 然而 因为我在之前的项目中大量使用了这个
  • 根据用户输入将 n 个反应式单选按钮添加到闪亮的应用程序

    我正在尝试创建一个闪亮的应用程序 用户可以在其中从数据框中选择变量以便对数据进行子集化 输出 最终 将是包含用户子集的数据表 我需要根据用户为子集选择的变量数量创建 n 个输入框 理想情况下 输入框将是动态单选按钮 用于子集因子 我还没有开
  • 使用不同的阈值替换多列中的值

    我有一个包含多个列的数据集 其中包含我想要转换为二进制的定量数据 为此 我想使用每列不同的阈值 Example Input antigen1 antigen2 antigen3 antigen4 1 215 421 2 12 2 1524
  • 仅当 ggplot 中 y 轴的下限设置为 0 时才会出现图条[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个条形图 当我将限制设置为 0 7 时 就会出现条形 但是 我希望下限为 1 而不是 0 当我将下限设置为 1 时 条形图不会出现 我收到以下错误消息 Removed 8 rows contain
  • 基于列重复数据集中的行,但增加行[重复]

    这个问题在这里已经有答案了 我有一个数据集 其中包含项目名称 开始年份和合同期限 我需要将这个数据集开发成时间序列 例如 我的数据集中的一行是 项目 A 开始年份 2003 年 合同期限 5 我想根据合同期限重复每一行 我的数据集如下所示
  • 如何很好地注释 ggplot2(手册)

    Using ggplot2我通常使用geom text和类似的东西position jitter注释我的情节 然而 对于一个漂亮的情节 我经常发现手动注释是值得的 像下面这样 data2 lt structure list type str
  • 从 glmnet 获取变量选择顺序

    我一直在使用 glmnet R 包为一个目标变量 Y 数字 和 762 个协变量构建 LASSO 回归模型 我使用 glmnet 函数 然后coef fit s 0 056360 获取该特定 lambda 值的系数值 我现在需要的是变量选择
  • 在 R 中编写多重积分函数

    为了将以下内容转换为函数 我想知道如何用 R 代码编写以下二重积分 bar x mu 假设pi0 and pi1以向量化方式实现函数 pi 0 和 pi 1 可能的解决方案是 integral lt function n mu s pi0
  • 在R中使用plotly在轴标题中换行和下标

    我刚开始使用plotly对于 R 中的一些交互式散点图 并且在轴标签上遇到困难 通常我设计我的情节ggplot2然后使用ggplotly函数来转换它们 但这有时由于某种原因非常慢 所以我想直接在中创建我的图plotly 我现在尝试更改轴标题
  • 如何测试字符串中的前三个字符是r中的字母还是数字?

    下面给出了我拥有的数据集的示例 请注意 总数据集中我有超过两列 ID X 1 MJF34 2 GA249D 3 DEW235R 4 4SDFR3 5 DAS3 我想测试 X 中的前三个字符是否是字母 如果是 那么我想替换该值以仅显示前三个字
  • dplyr::mutate 添加多个值

    网上有几个与此相关的问题dplyr Github 存储库 https github com hadley dplyr已经 并且至少有一个相关的问题 但没有一个问题完全涵盖了我的问题 我认为 在 dplyr mutate 调用中添加多列 ht
  • 如何计算满足条件的行数

    假设我有以下数据框 Data1 X1 X2 1 15 1 2 3 1 3 7 0 4 11 1 5 1 0 6 9 0 7 18 0 8 6 1 9 3 1 我想知道如何找到观察的总数X1大于 9 并且X2等于1 我想我需要使用sum 但我
  • 使用 data() 的 R 包命名空间问题 -- 找不到数据集

    我在尝试在我自己的包中导入包 即 robfilter 时遇到了问题 我尝试使用它的方法之一 adore filter 在这一行失败 data critvals 出现错误 未找到数据集 critvals 如果我通过 require robfi
  • 在 R 的 stargazer 表中设置注释格式

    我在用stargazer包来生成 回归输出 表 一切都在奇迹般地进行 直到我开始编辑笔记 First 换行很难 但是 Bryansuggests https stackoverflow com questions 21720264 star
  • 有条件地将字符串转换为特定数值

    我确信对此有一个简单的答案 但我已经扫描了堆栈溢出 但无法找到解决方案 似乎 sapply 和 ifelse 函数的组合可能可以完成这项工作 但我不确定 所以我有一个包含字符的数据框 除了一列是数值 Create dataframe whi

随机推荐

  • Jquery 在输入/按键时不起作用

    我正在尝试创建一个简单的搜索框 允许您根据在输入字段中输入的关键字进行搜索 如果您按下 提交 按钮 此操作就可以正常工作 我还希望能够按 Enter 或 Return 键来启动搜索 我尝试过使用 on 函数 它似乎只适用于单击 但在输入或按
  • Android 生命周期哪个事件在生命周期中只触发一次?

    我读过一些博客并访问了一些网站 我想知道哪个事件在生命周期中只触发了一次 阅读博客后我意识到onCreate 方法在生命周期内仅触发一次 我不知道我是对还是错 现在我的问题是 我想触发任何仅在我更改横向或纵向方向时触发一次的事件 而不是在启
  • 数组的扩展,其中元素是可选的

    我有一个数组String like so var myArray String 2 banana nil 31 我还有另一个数组String像这样 var myStringArray String 2 3 我为 Array 编写了一个扩展
  • 需要在Excel中合并3列

    我有 3 列 A B C 我需要合并这 3 列 并且我已经应用了 forumala A1 B1 C1输出为 E 列 我需要输出为 D 列 下面的公式将达到您想要的结果 TEXTJOIN TRUE A1 C1 Textjoin 的工作方式类似
  • 输入和文本区域可以拖动吗?

    MDN 规范以及我能通过 Google 找到的每个网站都说所有 HTML 元素都可以拖动 然而 在实践中 我发现我无法拖动文本输入或文本区域 即使它们已被禁用 例如 使用以下代码 img src http www placehold it
  • 在 jQuery 中生成下拉菜单的年份

    我想到了一个小问题 我正在尝试想出一种方法来解决它 基本上 我想要做的是将年份减去 18 年 即 2011 年返回 1993 年 并生成一个下拉选项 供用户选择在此之前的任何年份 基本上他们必须证明自己已超过法定年龄 18 岁 var mi
  • 具有 Angular 前端的简单 Django Rest Framework 应用程序会发生什么?

    我学习 Django 一段时间了 我发现这张图片很有帮助 我现在正在深入研究 Angular JS 我试图弄清楚每个组件 指令 控制器和服务 如何交互以及是否存在类似的 循环 这blog http kirkbushell me when t
  • Azure SQL 第一个查询速度慢

    我们遇到针对索引的第一次执行查询非常慢的情况 就像索引冷启动一样 该表很大 有数百万行 执行 30 秒 执行时间 4ms 数据库脚本 CREATE TABLE Audits Id int NOT NULL IDENTITY Timestam
  • 线程安全的get(访问器方法)

    我目前正在使用以下代码对变量进行线程安全访问 int gnVariable void getVariableValue int pnValue acquireLock Acquires the protection mechanism pn
  • MikeOS 引导加载程序中的堆栈段

    我不明白这段代码 mov ax 07C0h Set up 4K of stack space above buffer add ax 544 8k buffer 512 paragraphs 32 paragraphs loader cli
  • 如何使用 jquery imgAreaSelect 用 php 裁剪图像?

    我正在使用以下 javascript 代码来实例化 jquery图像区域选择 http odyniec net projects imgareaselect 裁剪我的图像 document ready function ladybug im
  • 单击文件下载后,成功后使用 AJAX 重定向到另一个页面

    In my WordPress project my Download button containing a zip file which onClick should be downloaded So the HTML producin
  • 如何捕获正在播放的音频?

    有谁知道如何以编程方式捕获正在播放的声音 即来自声卡的所有声音 而不是麦克风等输入设备 假设您正在谈论 Windows 则基本上可以通过三种方法来实现此目的 首先是打开音频设备的主输出作为录音源 这只有在驱动程序支持时才可能实现 尽管现在大
  • 带圆角边框的 Div

    我不明白获得 div 的更大圆角底部边框的公式 以及是否有更简单的方法在 Bootstrap 中实现它 现在是这样的 以及我想如何开发它 header background color blue height 40px width 90px
  • mysql计算唯一行值

    TABLE quotation id clientid 1 25 2 25 3 25 4 25 5 26 如何查询有多少个不同的客户端TABLE quotation 我不希望重复的条目被计算多次 我需要的答案是2 在 1 行中 因为唯一的非
  • Java:如果数组大小未知,如何初始化?

    我要求用户输入 1 到 100 之间的一些数字并将它们分配到一个数组中 数组大小未初始化 因为它取决于用户输入数字的次数 我应该如何分配数组长度 如果用户输入 5 6 7 8 9 5 个数字 则 int list becomes int l
  • 当字段不为空时创建部分索引

    我正在尝试在字段上创建部分索引 但仅当该字段不为空时 换句话说 我希望能够让许多文档能够存储 null 但对于在字段中实际具有值的文档 我希望该值是唯一的 这是我尝试使用的代码 db account createIndex email 1
  • 根据单元格值隐藏列

    在我的谷歌电子表格 A 中 我使用 TRANSPOSE 和 IMPORTRANGE 公式的组合从日历电子表格 B 导入数据 以便填写事件的工作时间表 因为每个日期都有 3 个事件空位 但这些空位并不总是被填满 所以我收到了很多过时的列 表格
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • 如何加速 R for 循环?

    我正在为 R 中 GWmodel 包中的 gwr basic 函数运行以下 for 循环 我需要做的是收集任何给定带宽的估计参数的平均值 代码如下 library GWmodel data DubVoter Dub voter LARent