簡體   English   中英

將多個for循環轉換為單個或嵌套的apply語句R

[英]Converting multiple for loops to single or nested apply statements R

我希望減少由於運行多個/嵌套循環而導致的過多處理時間。 關於這個主題似乎有幾個問題,但沒有多少R答案,所以這里有另一個(希望是更簡單的)示例。

本質上,我們可以將此示例視為從邏輯回歸輸出創建預測。 我想將下面的多個/嵌套循環轉換為一條apply語句。

使用循環的示例:

set.seed(1111)

#Data
b0 <- matrix(c(rnorm(10,-1, 0.1), rnorm(10,-2, 0.1)), c(10,2))
b1 <- matrix(c(rnorm(10,-.4, 0.1), rnorm(10,-.1, 0.1)), c(10,2))
b2 <- matrix(c(rnorm(10, 0, 0.1), rnorm(10,-.1, 0.1)), c(10,2))
x <- rnorm(5, 0.5, 0.01)
x2 <- rnorm(5, 0.25, 0.01)

#Predictions Array
pred.ray = array(NA, dim = c(10, 5, 2))

# Can do for loops but takes waaaay too long on full data set ~ 20hrs
for(i in 1:5){
  for (j in 1:2){
    pred.ray[,i,j] = plogis(b0[,j] + b1[,j]*x[i] + b2[,j]*x2[i])
  }}

pred.ray
len_x <- 5
ncol_b <- 2
val <- len_x * ncol_b

result <- mapply(function(i, j) plogis(b0 + b1 * i + b2 * j), x, x2)
inds <- lapply(0:1, function(i) sort(rep(seq(i, val+i-1, ncol_b) * val, val) + 
rep(1:val, each=len_x)))
ans <- array(c(sapply(inds, function(i) result[i])), dim=c(10,5,2))
identical(pred.ray, ans)
# TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM