Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在R中的foreach循环中使用multiply imputed set (mids)对象?

如何在R中的foreach循环中使用multiply imputed set (mids)对象?
EN

Stack Overflow用户
提问于 2020-06-30 16:04:54
回答 1查看 354关注 0票数 2

我正在尝试使用并行计算来计算最小绝对偏差回归参数的百分位自举95%置信区间,如本article中所述。但是,我使用的不是单个数据帧,而是一个多个推算数据集(mids)对象,该对象是通过mice包获得的,用于多个推算。这就是问题所在。

我想在foreach循环中使用mids (或多个推定数据集的列表)对象,执行引导,并将结果汇集在一起。通过将mids对象转换为一个列表,然后使用该列表中的一个元素,我成功地仅基于一个数据集获得了结果。尽管如此,我还是想一次使用所有数据集。

一个可重复的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(foreach)
library(doParallel)
cores_2_use <- detectCores() - 1

cl <- makeCluster(cores_2_use)
clusterSetRNGStream(cl, 9956)
registerDoParallel(cl)

library(mice)
imp_merged <-
  foreach(no = 1:cores_2_use, 
          .combine = ibind, 
          .export = "nhanes",
          .packages = "mice") %dopar%
  {
    mice(nhanes, m = 30, printFlag = FALSE)
  }
stopCluster(cl)

下面是我尝试过的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(quantreg)
library(mitml)
library(miceadds)
library(splines)

cl <- makeCluster(cores_2_use)
clusterSetRNGStream(cl, 9956)
registerDoParallel(cl)

boot.1 <- foreach(i = 1:100,
                  .combine = rbind,
                  .packages = c('quantreg', 'mice', 'mitml', 'splines')) %dopar% {
                    
                    longlist <- miceadds::mids2datlist(imp_merged)
                    boot_dat <- longlist[[6]][sample(1:nrow(longlist[[6]]), replace = TRUE), ]
                    ## This is now based only on the 6th element of longlist
                    ## I would like to use the whole mids/longlist object (330 data sets on my PC)
                    
                    fit1 <- rq(chl ~ ns(bmi, df = 2, B = c(21, 33)) +
                                 hyp + age, tau = 0.5,
                               data = boot_dat)
                    fit1$coef
                  }
stopCluster(cl)

boot.1.df <- as.data.frame(boot.1)
boot.1.pooled <- do.call(cbind, boot.1.df)
boot.1.ci <- apply(boot.1.pooled, 2, quantile, probs = c(0.025, 0.975))
t(boot.1.ci)

我使用longlist <- miceadds::mids2datlist(imp_merged)mids对象转换为多个输入数据集的列表,并通过boot_dat <- longlist[[6]][sample(1:nrow(longlist[[6]]), replace = TRUE), ]基于该列表的单个元素(即输入数据集)执行采样。我想使用整个mids对象或longlist的所有元素。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2020-07-06 08:04:27

一种可能的方法是简单地将数据集组合成一个大数据集,并直接从其中进行采样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
longlist_ = longlist[[1]]
for (j in 2:length(longlist))
  {
    longlist_ = rbind(longlist_,longlist[[i]])
  }
boot_dat <- longlist_[sample(1:nrow(longlist[[6]]), replace = TRUE), ]

另一种方法是随机选择一个数据集,随机选择一行,然后重复几次。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
boot_dat = NULL
for (j in seq(nrow(longlist[[6]])))
  {
    boot_dat = rbind(boot_dat, 
               longlist[[sample(length(longlist),1)]][sample(nrow(longlist[[1]]),1),])
  }

需要注意的是,为了避免rq中设计矩阵奇异性的错误,可以添加一些小的噪声。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
boot_dat[,'hyp'] = boot_dat[,'hyp'] + runif(nrow(boot_dat), -1e-10, 1e-10)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62661585

复制
相关文章
Java中的增强 for 循环 foreach
  foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。在
IT可乐
2018/01/04
3.1K0
Java中的增强 for 循环   foreach
Java 中for循环和foreach循环哪个更快?
在Java编程中,循环结构是程序员常用的控制流程,而for循环和foreach循环是其中比较常见的两种形式。关于它们哪一个更快的讨论一直存在。本文旨在探究Java中的for循环和foreach循环的性能差异,并帮助读者更好地选择适合自身需求的循环方式。通过详细比较它们的遍历效率、数据结构适用性和编译器优化等因素,我们将为大家揭示它们的差异和适用场景,以便您能够做出更明智的编程决策。
葡萄城控件
2023/10/16
6300
Java 中for循环和foreach循环哪个更快?
JavaScript中如何中断forEach循环
arr.forEach(callback[, thisArg]),callback会接收到三个参数:currentValue、index、array
meteoric
2018/11/20
2.7K0
js 中 forEach 如何跳出循环?
// 1.for方法跳出循环 function getItemByIdFor(arr, id) { var item = null; for (var i = 0; i < arr.length; i++) { console.log("for循环 i", i); if (arr[i].id == id) { item = arr[i]; break; } } return ite
蓓蕾心晴
2022/11/22
8.4K0
c# 中for和foreach循环的区别
    (2)效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查)
vv彭
2020/10/27
4.9K0
c# 中for和foreach循环的区别
lamda中stream的forEach与for循环对比
循环大概在50000大小的时候for循环就开始慢慢运行时间大于forEach,在50000数据之前都是for循环优势。但是当我直接加到1000000大小时发现for循环的速度优势又回来了,又测试了500000发现依然是for循环优势。 所以大概率下,几万几万数据时forEach速度是领先的。小数据和极大数据下for循环领先,所以推荐使用for循环,一般业务中很少有几万数据去循环。
全栈程序员站长
2022/11/15
1.2K0
lamda中stream的forEach与for循环对比
R中的循环绘图
上面我们将每一张图都单独输出了,下面来介绍如何将其全部组合起来,分别介绍两种R包的方法gridExtra&patchwork
R语言数据分析指南
2022/09/21
4.1K0
R中的循环绘图
forEach在集合中的使用
任何类型Collection的可迭代 - 列表,集合,队列 等都具有使用forEach的相同语法。
崔笑颜
2020/06/08
3.5K0
python中的for循环对象和循环退出
判断条件,1位true,0是flesh,成立时true,不成立flesh,not取反
py3study
2020/01/07
5.3K0
【说站】php中foreach的使用
2、如果foreach被定义为类,则可以输出所有属性,如果在类别之外被调用为函数,则只能输出public属性。
很酷的站长
2022/11/23
1.4K0
【说站】php中foreach的使用
day022: forEach中return有效果吗?如何中断forEach循环?
022: forEach中return有效果吗?如何中断forEach循环? 在forEach中用return不会返回,函数会继续执行。 let nums = [1, 2, 3]; nums.forEach((item, index) => { return;//无效 }) 中断方法: 使用try监视代码块,在需要中断的地方抛出异常。 官方推荐方法(替换方法):用every和some替代forEach函数。every在碰到return false的时候,中止循环。some在碰到return ture的时
用户3806669
2021/03/11
2.5K0
面试官:如何停止 JavaScript 中的 forEach 循环?
我对结果感到沮丧,问面试官:“为什么?实际上可以停止 JavaScript 中的 forEach 循环吗?”
前端达人
2023/08/31
2290
面试官:如何停止 JavaScript 中的 forEach 循环?
【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的. part3当然还是循环体. foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。 foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为fo
Angel_Kitty
2018/04/09
2.1K0
如何在Bash中编写循环?
人们想要学习Unix shell的一个常见原因是释放批处理的功能。如果要对许多文件执行某些操作,一种方法是构造一个遍历这些文件的命令来实现。在编程术语中,这称为执行控制,最常见的示例之一是for循环。
用户6543014
2020/02/21
2.5K0
Vue中的$set的使用
在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去; 当我们去看vue文档的时候,会发现有这么一句话:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。如下代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>vue $set</title> <script src="https://static.runoob.com/assets/vue/1.0.1
李文杨
2018/03/14
1.5K0
Vue中的$set的使用
java退出foreach循环_forEach方法如何跳出循环[通俗易懂]
3.1 foreach()不能使用break和continue这两个关键字,foreach和普通的for循环是不同的,它不是普通的遍历,实现continue的效果可以直接使用return。
全栈程序员站长
2022/09/01
15K0
Java 8中增强For循环与forEach()方法学习
Java 8是Java的一个重大版本,有人认为,虽然这些新特性领Java开发人员十分期待,但同时也需要花不少精力去学习。在这一小节中,我们将介绍Java 8的大部分新特性。
用户1289394
2019/03/08
7.2K0
Java 8中增强For循环与forEach()方法学习
Java 8中增强For循环与forEach()方法学习
Java 8是https://ask.qcloudimg.com/http-save/yehe-1289394/zr4ip2dir2.jpegJava的一个重大版本,有人认为,虽然这些新特性领Java开发人员十分期待,但同时也需要花不少精力去学习。在这一小节中,我们将介绍Java 8的大部分新特性。
用户1289394
2019/05/09
1.2K0
Java 8中增强For循环与forEach()方法学习
JS中forEach的坑
我们就按如下写了代码,但是却不能实现我们想要的结果,该方法最终会永远返回true。
码客说
2023/04/06
2.2K0
增强For循环(foreach)
(1)只能顺序遍历所有元素,无法实现较为复杂的循环,如在某些条件下需要后退到之前遍历过的某个元素,不能完成
星哥玩云
2022/09/14
2.2K0

相似问题

Set-MailboxFolderPersission中更有效的foreach对象循环?

12

如何在R中使用foreach循环修改共享对象?

14

如何在R中打印foreach循环的条目?

119

R中的foreach / forvalues循环

22

R中foreach()内的For循环

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文