簡體   English   中英

條件替換數組中的值

[英]Conditional replacement of values in an array

我想修改一個數組但具有逐個元素的條件。 這就是我想要做的

vector <- runif(18, 0,1)
xx <- array(vector, dim=c(2,3,3))
for (i in 1:2) {
    for (j in 1:3) {
        xx[i,j,1] <- ifelse(xx[i,j,1]<0.5,1,xx[i,j,1])
        xx[i,j,2] <- ifelse(xx[i,j,2]<0.4,1.5,xx[i,j,2])
        xx[i,j,3] <- ifelse(xx[i,j,3]<0.2,2,xx[i,j,3])
    }
}

有更有效的方法嗎? 謝謝

不確定你的意思是有效但這可以避免循環:

vector <- runif(18, 0,1)
xx <- array(vector, dim=c(2,3,3))
xx
xx[,,1][xx[,,1]<.5] <- 1
xx[,,2][xx[,,2]<.4] <- 1.5
xx[,,3][xx[,,3]<.2] <- 2

在線嘗試!

有兩種方法可以簡化這種雙循環

選項1:

vector <- runif(18, 0,1)
xx <- array(vector, dim=c(2,3,3))

xx[,,1][xx[,,1]<.5] = 1
xx[,,2][xx[,,2]<.4] = 1.5
xx[,,3][xx[,,3]<.2] = 2

但是,您仍然必須為每個條件寫一行。

第二種方法是使用lapply,但在這種情況下你必須創建三個向量:index,threshhold,substitution

idx = 1:3
thr = c(.5, .4, .2)
sb = c(1, 1.5, 2)

lapply(idx, function(k){
  xx[,,k][ xx[,,k]< thr[x] ] <<- sb[k]
  })

暫無
暫無

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

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