我正在尝试对R中矩阵的每个单元格执行一个函数。如果它们> 0,我想每3个单元格添加。
例子:
mat <- matrix(data=0:9, nrow=5, ncol=10, byrow=F)
mat3 <- apply(mat, MARGIN = 1, FUN= function(mat) if(mat != 0) {mat+3})
但首先创建了一个长度为 5 的列表,其次是每 3 个添加的所有单元格。
我正在尝试对R中矩阵的每个单元格执行一个函数。如果它们> 0,我想每3个单元格添加。
例子:
mat <- matrix(data=0:9, nrow=5, ncol=10, byrow=F)
mat3 <- apply(mat, MARGIN = 1, FUN= function(mat) if(mat != 0) {mat+3})
但首先创建了一个长度为 5 的列表,其次是每 3 个添加的所有单元格。
apply(mat, 2, function(x) {
ifelse(x > 0, x+3, x)})
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 8 0 8 0 8 0 8 0 8
[2,] 4 9 4 9 4 9 4 9 4 9
[3,] 5 10 5 10 5 10 5 10 5 10
[4,] 6 11 6 11 6 11 6 11 6 11
[5,] 7 12 7 12 7 12 7 12 7 12
您不需要任何申请,可以ifelse直接使用:
ifelse(mat > 0, mat+3, mat)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 8 0 8 0 8 0 8 0 8
[2,] 4 9 4 9 4 9 4 9 4 9
[3,] 5 10 5 10 5 10 5 10 5 10
[4,] 6 11 6 11 6 11 6 11 6 11
[5,] 7 12 7 12 7 12 7 12 7 12
但更快的解决方案是:
mat[mat > 0] <- mat[mat > 0] + 3
mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 8 0 8 0 8 0 8 0 8
[2,] 4 9 4 9 4 9 4 9 4 9
[3,] 5 10 5 10 5 10 5 10 5 10
[4,] 6 11 6 11 6 11 6 11 6 11
[5,] 7 12 7 12 7 12 7 12 7 12
我们也可以即时执行此操作
mat + (mat > 0) * 3
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,] 0 8 0 8 0 8 0 8 0 8
#[2,] 4 9 4 9 4 9 4 9 4 9
#[3,] 5 10 5 10 5 10 5 10 5 10
#[4,] 6 11 6 11 6 11 6 11 6 11
#[5,] 7 12 7 12 7 12 7 12 7 12