小编jos*_*kre的帖子

为什么parLapplyLB实际上没有平衡负载?

我正在测试该parLapplyLB()功能,以了解它如何平衡负载.但我没有看到任何平衡发生.例如,

cl <- parallel::makeCluster(2)

system.time(
  parallel::parLapplyLB(cl, 1:4, function(y) {
    if (y == 1) {
      Sys.sleep(3)
    } else {
      Sys.sleep(0.5)
    }}))
##   user  system elapsed 
##  0.004   0.009   3.511 

parallel::stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

如果它真正平衡了负载,则休眠3秒的第一个作业(作业1)将在第一个节点上,而其他三个作业(作业2:4)将在另一个节点上休眠总共1.5秒.总的来说,系统时间应该只有3秒.

相反,我认为作业1和2被赋予节点1,作业3和4被赋予节点2.这导致总时间为3 + 0.5 = 3.5秒.如果我们运行相同的代码parLapply()代替parLapplyLB(),我们得到相同的系统时间约3.5秒.

我不理解或做错了什么?

r rparallel

14
推荐指数
1
解决办法
1139
查看次数

使用来自tidyr的聚集时保留属性(属性不相同)

我有一个数据框,需要分成两个表来满足Codd的第三范式.在一个简单的例子中,原始数据框看起来像这样:

library(lubridate)
> (df <- data.frame(hh_id = 1:2,
                   income = c(55000, 94000),
                   bday_01 = ymd(c(20150309, 19890211)),
                   bday_02 = ymd(c(19850911, 20000815)),
                   gender_01 = factor(c("M", "F")),
                   gender_02 = factor(c("F", "F"))))

    hh_id income    bday_01    bday_02 gender_01 gender_02
  1     1  55000 2015-03-09 1985-09-11         M         F
  2     2  94000 1989-02-11 2000-08-15         F         F
Run Code Online (Sandbox Code Playgroud)

当我使用聚集函数时,它会警告属性不相同,并且会丢失性别因素和bday的润滑(或实际示例中的其他属性).是否有一个很好的tidyr解决方案,以避免丢失每列的数据类型?

library(tidyr)
> (person <- df %>% 
      select(hh_id, bday_01:gender_02) %>% 
      gather(key, value, -hh_id) %>%
      separate(key, c("key", "per_num"), sep = "_") %>%
      spread(key, value))

     hh_id per_num       bday gender
   1     1      01 1425859200      M …
Run Code Online (Sandbox Code Playgroud)

r tidyr

12
推荐指数
1
解决办法
1万
查看次数

with_tz与时区矢量

我有一个像这样的数据帧:

library(dplyr)
data <- data_frame(
  timestamp_utc = c('2015-11-18 03:55:04', '2015-11-18 03:55:08', 
                    '2015-11-18 03:55:10'),
  local_tz = c('America/New_York', 'America/Los_Angeles', 
               'America/Indiana/Indianapolis')
  )
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新的变量,将UTC时间戳转换为local_tz列中定义的本地时间.然而,两者formatwith_tz(来自lubridate)只期望一个时区,而不是时区矢量.我正在寻找这样的东西:

mutate(data, timestamp_local = with_tz(timestamp_utc, tzone = local_tz))
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

r lubridate dplyr

6
推荐指数
2
解决办法
1314
查看次数

标签 统计

r ×3

dplyr ×1

lubridate ×1

rparallel ×1

tidyr ×1