R 功能“;如果;应用于每个单元格

R 功能“;如果;应用于每个单元格,r,if-statement,matrix,R,If Statement,Matrix,我正在尝试对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}) mat您不需要任何应用,可以直接使用ifelse: ifelse(mat > 0, mat+3, mat) [,1] [,2]

我正在尝试对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})

mat您不需要任何应用,可以直接使用
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]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

您不需要任何应用,可以直接使用
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]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

我们也可以用

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

我们也可以在飞行中使用

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