问题标签 [rparallel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
27 浏览

r - 不同目录中的同时 R 会话

我正在寻找一种方法来从当前会话开始R在用户定义的目录中工作的新实例。R例如,假设我有

我想做类似的事情

换句话说,我希望能够使用R引用另一个工作目录的另一个会话来评估某些内容,同时保持主R会话等待。是否有任何包/功能/做事方式?

0 投票
0 回答
824 浏览

r - parLapply:未使用的参数(MoreArgs

当我遇到意外问题时,我试图调试我正在处理的 parLapply 函数:parLapply 的 MoreArgs 参数不起作用!现在是凌晨 5 点,我一定很累,错过了一些非常明显和愚蠢的东西,但我终生无法看到它是什么。无论如何,这是给我带来麻烦的最小示例:

输出是:

0 投票
1 回答
89 浏览

r - R 并行 - Partools 包 - `calm()` 函数出错

我正在使用该partools包并行运行线性回归。我正在使用该calm()函数执行此操作,该函数是包版本 R 的包装器lm()

我在 64gb 节点上使用 20 个内核。

我在运行该calm()函数时收到错误,并且我已将问题隔离到一个变量:agelvl. 由于partools必须将数据集拆分为块(块的数量等于要使用的核心数量),因此据我所知,变量存储为字符或整数。agelvl由于它的命名级别,它被存储为一个字符,所以我factor()在函数中使用它。

这是代码:

这是错误:

当我在本地机器上运行上述代码时(尽管使用 3 个核心,而不是 20 个),我无法重现该错误。这表明问题出现在分块中,特别agelvl是一个或多个块中缺少给定级别的 。

但是,这是agelvl未分块数据中的摘要:

在我看来,分成 20 个块似乎不太可能,这 20 个块中的任何一个都不会丢失这些级别中的任何一个。我什至单独检查了每 20 个块,我没有看到任何级别丢失:

有趣的是,当我将数据分成 3 个块并在集群上使用 3 个核心而不是 20 个核心时,我让它运行,就像我能够在我的本地机器上一样。

那么,为什么在使用 20 核而不是 3 核时会出现这个问题?

0 投票
0 回答
62 浏览

r - R Google Compute Engine 创建集群错误

我正在尝试创建一个包含在 GCE 上的虚拟机上的 R 集群。我遵循了googleComputeEngineR中的示例。我已经粘贴了下面的代码。

基本上,我可以创建虚拟机并建立对它们的 SSH 访问,但 socketConnection 一直超时。有什么想法可能是错的吗?

这是我得到的输出:

2018-10-10 20:27:20> 创建模板虚拟机

2018-10-10 20:27:22> 检查操作...待处理

2018-10-10 20:27:33> 运行中...

2018-10-10 20:27:53> 操作在 17 秒内完成

2018-10-10 20:27:53> 外部 IP 例如 cpu1:35.240.99.251

2018-10-10 20:27:53> ## VM r-base 在 35.240.99.251 运行

2018-10-10 20:27:53> 等待几分钟,让初始 docker 容器下载并安装,然后再登录。

2018-10-10 20:27:54> 虚拟机运行

2018-10-10 20:27:59> 创建模板虚拟机

2018-10-10 20:28:01> 检查操作...待处理

2018-10-10 20:28:21> 操作在 5 秒内完成

2018-10-10 20:28:22> 外部 IP 例如 cpu2:35.205.28.126

2018-10-10 20:28:22> ## VM r-base 在 35.205.28.126 运行

2018-10-10 20:28:22> 等待几分钟,让初始 docker 容器下载并安装,然后再登录。

2018-10-10 20:28:23> 虚拟机运行

2018-10-10 20:28:30> SSH 公钥上传到实例

2018-10-10 20:28:38> SSH 公钥上传到实例

2018-10-10 20:28:59> 外部 IP 例如 cpu1:35.240.99.251

socketConnection 中的错误(“localhost”,端口 = 端口,服务器 = TRUE,阻塞 = TRUE,:

已达到已用时间限制

0 投票
1 回答
97 浏览

r - 如何从 R 包中的动态库评估 C 函数?

0 投票
1 回答
262 浏览

r - 并行化采用外部指针的函数 (XPtr)

这个问题既不是这个问题的副本,也不是 这个问题副本,它们是关于返回外部指针的函数。

这就是问题所在。此后的 Rcpp 代码定义了两个函数,一个创建 XPtr,另一个可以在 XPtr 上工作。

它工作正常:

让我们尝试并行化对g. 这有效:

预期行为:

但这不起作用:

意外行为:

问题似乎是由于在调用集群中的从属设备之前在函数中使用了一次外部指针。什么解释了这种行为,是否有解决方法?提前谢谢了。

0 投票
0 回答
145 浏览

r - R non-standard evaluation : get promise value while leaving it unevaluated [or: keep external pointer valid...]

This a follow-up to Parallelize function taking external pointers (XPtr)

I won't reproduce the Cpp code here to make things shorter. The problem was to that once a parameter of a function is evaluated, it is defined in the function's environment and, in the case of an external pointer, is no longer available in a fork cluster.

So while this function worked:

This function didn't:

As pointed out by Ralf Stubner, this came from the fact that the call g(a, 0) forced the evaluation of the promise a. He suggested the following work around (here with two debug prints to understand how it works):

This allowed to access to whatever was in a, but a was still an unevaluated promise. But this doesn't work when test3 is called from another function!

While test4 works well (the recursive promise evaluation seems to give a valid pointer), the workaround in test3 no longer works when called from test5.

The debugging prints show that despite the eval(substitute(a)) trick, the promise is evaluated. My understanding is that this tricks forces the evaluation of the promise b of test5 in its environment, thus a becomes evaluated too.

Is there another workaround? (I tried to play with pryr::parent_promise but even the code from the example in the man page gives strange results).

I have other complex problems of this type. A general way to get the content of a promise without evaluating it, or to pass external pointers to other functions, with a parLapply call at the very end, without stumbling constantly on this problem, would be much welcome.

0 投票
0 回答
398 浏览

r - 无法在 Windows 10 上制作集群

我无法在 Windows 10 计算机上使用parallel::makeCluster或。snow::makeCluster我经常收到此错误,每次使用不同的端口号:

我使用这个 R 代码,它在另一台计算机上运行良好,但我不知道为什么相同的代码对我不起作用:

我尝试了一些建议的解决方案但没有成功,包括禁用防火墙。有没有办法避免在 Windows 计算机上阻塞端口(或解除阻塞)以并行使用 R?

0 投票
1 回答
3114 浏览

r - makeCluster 函数中的第一个参数究竟是做什么的?

从我的问题的性质可以看出,我是 r 编程的新手。我正在尝试利用 train 函数的并行计算能力。

我需要有人帮我解释这段代码。最初的第一个参数makeCluster()had nthreads 但在运行之后

我了解到我有 4 个线程可用。我根据指南中提供的消息更改了值。这能让我一次同时运行 128 次 train 函数迭代吗?如果是这样,首先获取我的计算机拥有的线程和内核数量有什么意义?

0 投票
0 回答
112 浏览

r - R parLapply 需要越来越多的时间才能完成

我在一个循环中运行函数 parLapply 并验证一个奇怪的行为。每次迭代的时间显着增加,这样的增加没有多大意义。

因此,我开始在周期内对函数进行计时,以查看哪个函数花费的时间最多,我发现 parLapply 花费了超过 95% 的时间。因此,我进入了 parLapply 函数并对其计时,以查看函数内部和外部之间的时间是否匹配。他们并没有很大的差距。这个余量随着时间的推移而增加,并且差异可以达到几秒钟,这对算法完成所需的时间产生了很大的影响。

我预计 time.taken 将类似于所有 time.taken_par 的总和。但事实并非如此。所有 time.taken_par 的总和通常为 0.026 秒,而 time.taken 开始时是该值的 4 倍,这很好,但随后会增加到更多(> 5 秒)。

谁能解释发生了什么和/或我认为应该发生的事情是否错误?是内存问题吗?

谢谢您的帮助!

编辑:

的输出parLapply如下。然而,在我的测试中,有 10 个列表,而不是本例中的 3 个。返回的每个单独列表的大小parLapply始终相同,在本例中为 25。

编辑2:

好的,我发现了问题所在。我有一个数组,我使用vector("list",10000). 在循环的每次迭代中,我都会向这个数组添加一个列表列表。此列表列表的大小为 6656 字节。因此,在 10000 次迭代中,它甚至不等于 0.1Gb。然而,随着这个数组开始填满,并行化的性能开始下降。我不知道为什么会发生这种情况,因为我在具有 64Gb RAM 的机器上运行脚本。这是一个已知问题吗?