小编sss*_*dan的帖子

doParallel"foreach"不一致地从父环境继承对象:"{:task 1 failed - "中的错误找不到函数......"

我有一个foreach的问题,我无法搞清楚.以下代码在我尝试过的两台Windows计算机上失败,但在三台Linux计算机上运行成功,所有这些都运行相同版本的R和doParallel:

library("doParallel")
registerDoParallel(cl=2,cores=2)

f <- function(){return(10)}
g <- function(){
    r = foreach(x = 1:4) %dopar% {
        return(x + f())
    }
    return(r)
}
g()
Run Code Online (Sandbox Code Playgroud)

在这两台Windows计算机上,返回以下错误:

Error in { : task 1 failed - "could not find function "f""
Run Code Online (Sandbox Code Playgroud)

但是,这在Linux计算机上运行得很好,并且使用%do%而不是%dopar%也可以正常工作,并且适用于常规for循环.

同样是变量,如设置真正的i <- 10和更换return(x + f())return(x + i)

对于具有相同问题的其他人,有两种解决方法:

1)使用.export显式导入所需的函数和变量:

r = foreach(x=1:4, .export="f") %dopar% 
Run Code Online (Sandbox Code Playgroud)

2)导入所有全局对象:

r = foreach(x=1:4, .export=ls(.GlobalEnv)) %dopar% 
Run Code Online (Sandbox Code Playgroud)

这些变通方法的问题在于,对于一​​个积极开发的大型软件包来说,它们并不是最稳定的.无论如何,foreach应该表现得像.

是什么导致了这个以及是否有修复的想法?


该功能的计算机版本信息:

R version 3.2.2 (2015-08-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS release 6.5 (Final)

other …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach r doparallel

15
推荐指数
2
解决办法
9267
查看次数

用于计算R中的集合的幂集(所有可能的子集)的算法

我无法在任何地方找到答案,所以这是我的解决方案.

问题是:如何计算R中的功率?

可以使用库"sets"执行此操作,使用命令2^as.set(c(1,2,3,4))生成输出{{}, {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}, {1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}, {1, 2, 3, 4}}.但是,这使用递归算法,这种算法相当慢.


这是我提出的算法.

它是非递归的,所以它比其他一些解决方案快得多(在我的机器上比"sets"包中的算法快约100倍).速度仍为O(2 ^ n).

该算法的概念基础如下:

for each element in the set:
    for each subset constructed so far:
        new subset = (subset + element)
Run Code Online (Sandbox Code Playgroud)

这是R代码:

编辑:这是相同概念的更快版本; 我原来的算法是在这篇文章的第三条评论中.对于一组19的长度,这台机器在我的机器上快30%.

powerset = function(s){
    len = length(s)
    l = vector(mode="list",length=2^len) ; l[[1]]=numeric()
    counter = 1L
    for(x …
Run Code Online (Sandbox Code Playgroud)

r set powerset

6
推荐指数
1
解决办法
6081
查看次数

增加 ShinyBS 中工具提示/弹出框的长度

ShinyBS 包提供了一种向 Shiny 应用程序的元素添加工具提示和弹出窗口的绝佳且简单的方法。然而,这些的长度被严格限制在 40 个字符左右。我确实需要增加这些工具提示中允许的字符数。

一个例子:

library(shiny)
library(shinyBS)

shinyApp(
  ui = fluidPage(
      column(5,sliderInput("n", "Short tooltip", 5, 100, 20),
                   bsTooltip("n",title="This is a short tooltip, so it works."),
                   sliderInput("n2", "Long tooltip", 5, 100, 20),
                   bsTooltip("n2",title="This is a longer tooltip, so it doesn't work."))
  ), 
  server = function(input, output) {}
)
Run Code Online (Sandbox Code Playgroud)

r twitter-bootstrap shiny twitter-bootstrap-tooltip

3
推荐指数
1
解决办法
1177
查看次数