在 forloop 期间为矩阵的给定行中的每个值设置 limit/threshold
setting a limit/threshold for each value in a given row(s) of a matrix during a forloop
我有一个用于在 r 中投影矩阵的 for 循环,我想在给定行的值上设置一个“上限”或上限 limit/threshold,这样它们就不会超过这个值。下面是一个示例代码,我已经注释掉了我在 forloop 中的尝试。目标是第三行中的任何迭代 results/results 在任何时候都不会超过 10000,如果超过,它们将变为 10000。在此先感谢您的帮助。
set.seed(123)
A <- lapply(1:50, function(x) # construct list of matrices
matrix(c(0, 0, 10,
rbeta(1,5,4), 0, 0,
0, rbeta(1,10,2), 0), nrow = 3,ncol=3, byrow = TRUE, ))
n <- c(1000,100,10) # initial vector of abundances
nYears = 50 # define the number of years to project over
allYears <- matrix(0,nrow=3,ncol=nYears+1) # build a storage array for all abundances
allYears[,1] <- n # set the year 0 abundance
i1 <- 2:ncol(allYears)
for(t in seq_along(i1)) {
#ifelse (allYears[3,i1[t]-1] > 10000,10000,allYears[3,i1[t]-1])
allYears[,i1[t]] <- A[[t]] %*% allYears[,i1[t]-1]
}
希望我清楚地理解你的问题。
因此,您试图将第三行的值限制为某个阈值。
我想你的代码就差不多了。
在您决定是否通过 ifelse
对某一特定条目设置限制后,
您希望将(更新的)值保存到输出矩阵 allYears
。
因此,
你可以得到你想要的矩阵。
set.seed(123)
A <- lapply(1:50, function(x) # construct list of matrices
matrix(c(0, 0, 10,
rbeta(1,5,4), 0, 0,
0, rbeta(1,10,2), 0), nrow = 3,ncol=3, byrow = TRUE, ))
n <- c(1000,100,10) # initial vector of abundances
nYears = 50 # define the number of years to project over
allYears <- matrix(0,nrow=3,ncol=nYears+1) # build a storage array for all abundances
allYears[,1] <- n # set the year 0 abundance
i1 <- 2:ncol(allYears)
for(t in seq_along(i1)) {
allYears[,i1[t]] <- A[[t]] %*% allYears[,i1[t]-1]
### Check and update the entry for the output matrix ###
allYears[3,i1[t]] <- ifelse (allYears[3,i1[t]] > 10000, 10000, allYears[3,i1[t]])
}
由 reprex package (v2.0.1)
于 2022-01-25 创建
我有一个用于在 r 中投影矩阵的 for 循环,我想在给定行的值上设置一个“上限”或上限 limit/threshold,这样它们就不会超过这个值。下面是一个示例代码,我已经注释掉了我在 forloop 中的尝试。目标是第三行中的任何迭代 results/results 在任何时候都不会超过 10000,如果超过,它们将变为 10000。在此先感谢您的帮助。
set.seed(123)
A <- lapply(1:50, function(x) # construct list of matrices
matrix(c(0, 0, 10,
rbeta(1,5,4), 0, 0,
0, rbeta(1,10,2), 0), nrow = 3,ncol=3, byrow = TRUE, ))
n <- c(1000,100,10) # initial vector of abundances
nYears = 50 # define the number of years to project over
allYears <- matrix(0,nrow=3,ncol=nYears+1) # build a storage array for all abundances
allYears[,1] <- n # set the year 0 abundance
i1 <- 2:ncol(allYears)
for(t in seq_along(i1)) {
#ifelse (allYears[3,i1[t]-1] > 10000,10000,allYears[3,i1[t]-1])
allYears[,i1[t]] <- A[[t]] %*% allYears[,i1[t]-1]
}
希望我清楚地理解你的问题。 因此,您试图将第三行的值限制为某个阈值。 我想你的代码就差不多了。
在您决定是否通过 ifelse
对某一特定条目设置限制后,
您希望将(更新的)值保存到输出矩阵 allYears
。
因此,
你可以得到你想要的矩阵。
set.seed(123)
A <- lapply(1:50, function(x) # construct list of matrices
matrix(c(0, 0, 10,
rbeta(1,5,4), 0, 0,
0, rbeta(1,10,2), 0), nrow = 3,ncol=3, byrow = TRUE, ))
n <- c(1000,100,10) # initial vector of abundances
nYears = 50 # define the number of years to project over
allYears <- matrix(0,nrow=3,ncol=nYears+1) # build a storage array for all abundances
allYears[,1] <- n # set the year 0 abundance
i1 <- 2:ncol(allYears)
for(t in seq_along(i1)) {
allYears[,i1[t]] <- A[[t]] %*% allYears[,i1[t]-1]
### Check and update the entry for the output matrix ###
allYears[3,i1[t]] <- ifelse (allYears[3,i1[t]] > 10000, 10000, allYears[3,i1[t]])
}
由 reprex package (v2.0.1)
于 2022-01-25 创建