gpt4 book ai didi

r - 如何在R中的for循环中逐项应用功能

转载 作者:行者123 更新时间:2023-12-04 03:23:34 26 4
gpt4 key购买 nike

我有一个复杂的函数,可以逐行处理矩阵。该函数逐行返回必须用作矩阵行条目的值。我需要使用 for循环以确保正确存储这些值。我无法使用简单的 lapply 立即应用该功能或 for循环,因为必须有一个基于每一行的值的条件。有没有办法运行for在移动到下一个项目之前循环每个项目并将结果存储在矩阵中?请注意,这与我发布的其他问题不同。我的最后一个问题是在矩阵上应用条件。但是,在这里,我需要对项目使用函数并将它们逐行存储在矩阵中。
以一种简单的方式:
这里我有一个向量列表(存储在列表 x 中)。我需要 for loop循环遍历 x 的每个向量before 移动到第二个向量的元素。对于这种情况,我创建了一个空矩阵 ( Mat )。然后,我需要在 x 的第一个向量上应用正方形。 (即, c(1:4) )。然后,在移动对 x 的下一个向量平方之前,如果该行的任何条目是 != 0 ,则结果存入 Mat (最后一行(行 5 )),循环移动到第二个向量。但是,如果所有条目都是 ==0 ,那么循环必须停止并返回一个空矩阵。如果第二个向量的结果都是==0 ,然后循环将零存储到 5 的所有行(除了行 Mat ) .如果不是,则循环移动到第三个向量,依此类推。
我的代码给了我一个错误 Error in Mat[k, i] <- res[[i]] : number of items to replace is not a multiple of replacement length In addition: Warning message: In seq_len(k - 1) : first element used of 'length.out' argument

    x <- list(c(1:4), c(2,0,0), c(0,0,0), 0)
res <- list() ## I would like to store the result of squares.
Mat <- matrix(0,5,5) ## here is the matrix where the result
d <- 5
for(k in d:2){
for (i in seq_along(k-1)){
res[[i]] <- x[[i]]^2 ## here I would like to find the result of the first item only before moving to the next one.
Mat[k,i] <- res[[i]] ## store the result of the vector sas a row (bottom to top)
if(all(setdiff(Mat[k,i], 0) == 0, na.rm = TRUE)){ ## if the result of the current vector is `0` then, I want to stop. The current row and coming rows set to zero.
Mat[k,] <- 0
break
}
}
}

Expected result:


Mat
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 4 0 0 0 0
[5,] 1 4 9 16 0

最佳答案

我们可以试试for像这样循环

x <- list(c(1:4), c(2, 0, 0), c(0, 0, 0), 0)
Mat <- matrix(0, 5, 5)
for (k in seq_along(x)) {
r <- x[[k]]^2
if (any(r != 0)) {
Mat[nrow(Mat) - k + 1, seq_along(r)] <- r
} else {
break
}
}
这使
> Mat
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 4 0 0 0 0
[5,] 1 4 9 16 0

关于r - 如何在R中的for循环中逐项应用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68078522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com