小编kss*_*kss的帖子

R 中的并行处理 - 使用 mclapply() 与 pbmclapply() 设置种子

我正在 R 中并行模拟(使用包mclapply()中的parallel),并希望跟踪每个函数调用的进度。因此,我决定使用包pbmclapply()中的pbmcapply内容,以便每次运行模拟时都有一个进度条pbmclapply()专门创建为 的包装器mclapply(),因此除了进度条之外,它们应该具有相同的功能)

我能够设置种子并获得可重现的结果mclapply(),而不会出现问题,但pbmclapply()每次运行都会给我不同的结果,这让我感到困惑。我在下面包含了一个非常简单的表示。

例如,这是使用mcapply()

## GIVES THE SAME RESULT EACH TIME IT IS RUN
library(parallel)
RNGkind("L'Ecuyer-CMRG")
set.seed(1)
x <- mclapply(1:100, function(i) {rnorm(1)}, mc.cores = 2)
y <- do.call(rbind, x)
z <- mean(y)
print(mean(z))
Run Code Online (Sandbox Code Playgroud)

这是使用相同的代码pbmclapply()

## GIVES DIFFERENT RESULTS EACH TIME IT IS RUN
library(pbmcapply)
RNGkind("L'Ecuyer-CMRG")
set.seed(1)
x <- pbmclapply(1:100, function(i) {rnorm(1)}, mc.cores = 2)
y <- …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r mclapply reproducible-research random-seed

8
推荐指数
1
解决办法
1275
查看次数

检查日期向量中是否存在位于给定范围内的值

我有一个日期向量,想要检查某个特定日期,在向量中的150天内以及该日期之前的150天内,向量中是否存在值。我的数据的一个简单示例如下所示:

given_date <- as.Date('2006-06-06')
dates <- as.Date(c("2005-02-22", "2005-04-26", "2005-08-02", "2005-10-04", "2005-12-06", "2006-03-14", "2006-06-06"))
Run Code Online (Sandbox Code Playgroud)

我知道我可以做的某个日期会given_date %in% dates返回TRUE

但是,对于我的问题,我想检查类似于以下内容的内容:

ifelse(range(given_date-1, given_date-150) %in% dates & range(given_date-151, given_date-300) %in% dates, TRUE, FALSE)

因此对于我提供的数据,将返回结果,TRUE因为在150天内存在一个日期given_date(例如2006-03-14存在于(2006-01-07,2006-06-06)范围内),并且在此日期之前的150天内存在另一个(例如,2005-10-04存在于(2005-08-10,2006-01-07)的范围内)。

感谢您对我如何在R中做到这一点的任何帮助!

if-statement r vector lubridate

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

遍历 javascript 对象以获取键值对

这是我的代码:

obj = {"TIME":123,"DATE":456}

console.log(obj.TIME);
console.log("---------")

for (var key in obj) {
  console.log(key);
  console.log(obj.key);
}
Run Code Online (Sandbox Code Playgroud)

它打印如下:

123
---------
TIME
undefined
DATE
undefined
Run Code Online (Sandbox Code Playgroud)

为什么 console.log(obj.key) 打印为未定义?

我希望我的代码打印出以下内容,使用 obj.key 打印出每个键的值:

123
---------
TIME
123
DATE
456
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

javascript json loops undefined key-value

5
推荐指数
1
解决办法
1187
查看次数

基于固定日期间隔大小的移动窗口变异新列,在 R 中

我有 R 中一位患者的数据,其中显示了他们在某种情况下测试呈阳性的日期。数据如下所示:

      date  positive
2005-02-22      yes
2005-04-26       no
2005-08-02      yes
2005-10-04       no
2005-12-06      yes
2006-03-14       no
2006-06-06       no
2006-09-12      yes
2006-12-19      yes
2007-03-27      yes
Run Code Online (Sandbox Code Playgroud)

现在我介绍一个新的定义。如果“当前测试为阳性,并且在之前 365 天内>=50% 的测试为阳性”,则将患者的状况定义为“慢性阳性”。所以我想创建一个输出数据集,告诉我患者在每个日期是否长期呈阳性。例如,输出应如下所示(例如,在 2006-09-12 上,它们是“阳性”但不是“慢性阳性”,因为在过去 365 天内的 4 次访问中有 3 次是阴性的):

      date  positive  chronic
2005-02-22      yes        no
2005-04-26       no        no
2005-08-02      yes       yes
2005-10-04       no        no
2005-12-06      yes       yes
2006-03-14       no        no
2006-06-06       no        no
2006-09-12      yes        no
2006-12-19      yes        no
2007-03-27      yes       yes
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?在感兴趣的每一行中,我需要能够查看之前的行(在过去 365 天内)并评估它们的阳性比例。我想我可以使用lead/lag …

r lag conditional-statements dplyr rolling-computation

5
推荐指数
2
解决办法
119
查看次数

换行符不适用于 jQuery .text()

我有以下代码:-

function data(x) {
     var dataList = "";
     for (var key in obj) {
          dataList += key + ": " + obj[key] + "\n"
     }
     $('#modalText').text(dataList);
     document.getElementById('dataModal').style.display='block';
}
Run Code Online (Sandbox Code Playgroud)

它会像这样填充 HTML:

<p id="dataList"></p>
Run Code Online (Sandbox Code Playgroud)

尽管在循环的每次迭代中我都有一个 '\n' 连接到我的字符串,但我无法在每个键/值对之后获得换行符以显示在我的模式中。我也尝试过 jQuery .append() 函数而不是 .text(),但无济于事。

我的变量 dataList 在控制台中以正确的换行符打印,如下所示:

key: 123
time: 12:00
department: taxes
Run Code Online (Sandbox Code Playgroud)

但是在模态中打印时,没有换行符:

key: 123 time: 12:00 department: taxes
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它在我的模式中显示,在每个键值对之后换行,就像它在控制台中显示的那样?

javascript jquery loops line-breaks key-value

2
推荐指数
1
解决办法
3413
查看次数

满足条件时,滞后向量加 1,同时重置为 0

我有一系列治疗,每天一次(二进制),比如:

trt <- c(0, 0, 1, 0, 0, 0, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)

我想创建一个向量days_since,即:

  1. 是 NA 直到第一次治疗。
  2. 是 0 哪里trt是 1
  3. 计算自上次治疗以来的天数

所以,输出days_since应该是:

days_since <- c(NA, NA, 0, 1, 2, 3, 0, 1, 2)
Run Code Online (Sandbox Code Playgroud)

我将如何在 R 中做到这一点?为了得到days_since,我基本上需要滞后一个元素并加 1,但每次原始向量 ( trt) 为 1时都重置。如果这在没有 for 循环的情况下可行,那将是理想的,但不是绝对必要的。

r lag cumsum

1
推荐指数
2
解决办法
53
查看次数