我尝试对R中矩阵的每个单元格执行一个函数。我想每3个单元格相加,如果它们〉0。示例:
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个单元格相加的所有单元格。
yduiuuwa1#
对于这种简单的情况,最好使用来自@akrun或@Karolis Koncevičius的解决方案,但您也可以:
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
inb24sb22#
你不需要任何应用,可以直接使用ifelse:
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
k3fezbri3#
我们也可以使用
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
3条答案
按热度按时间yduiuuwa1#
对于这种简单的情况,最好使用来自@akrun或@Karolis Koncevičius的解决方案,但您也可以:
inb24sb22#
你不需要任何应用,可以直接使用
ifelse
:但更快的解决方案是:
k3fezbri3#
我们也可以使用