> x <- array(-10:10, dim=c(4,5))
> x
[,1] [,2] [,3] [,4] [,5]
[1,] -10 -6 -2 2 6
[2,] -9 -5 -1 3 7
[3,] -8 -4 0 4 8
[4,] -7 -3 1 5 9
如何将“max(x,0)”应用于每个元素,以便得到此矩阵:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 2 6
[2,] 0 0 0 3 7
[3,] 0 0 0 4 8
[4,] 0 0 1 5 9
答案 0 :(得分:16)
使用pmax
:
pmax(x,0)
# [,1] [,2] [,3] [,4] [,5]
#[1,] 0 0 0 2 6
#[2,] 0 0 0 3 7
#[3,] 0 0 0 4 8
#[4,] 0 0 1 5 9
答案 1 :(得分:5)
您可以使用R的索引函数[
直接执行此操作:
x <- array(-10:10, dim=c(4,5))
x[x < 0] <- 0
这是有效的,因为x < 0
创建了一个逻辑矩阵输出:
x < 0
[,1] [,2] [,3] [,4] [,5]
[1,] TRUE TRUE TRUE FALSE FALSE
[2,] TRUE TRUE TRUE FALSE FALSE
[3,] TRUE TRUE FALSE FALSE FALSE
[4,] TRUE TRUE FALSE FALSE FALSE
结果矩阵是:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 2 6
[2,] 0 0 0 3 7
[3,] 0 0 0 4 8
[4,] 0 0 1 5 9
两种方法之间的时间惊人地相似。这是一个更大的例子来说明可比较的时间:
xbigC <- xbigE <- matrix(sample(-100:100, 1e8, TRUE), ncol = 1e4)
system.time(xbigC[xbigC < 0] <- 0)
#---
user system elapsed
4.56 0.37 4.93
system.time(xbigE <- pmax(xbigE,0))
#---
user system elapsed
4.10 0.51 4.62
all.equal(xbigC, xbigE)
#---
[1] TRUE
答案 2 :(得分:1)
看来pmax()
的参数顺序会影响输入为矩阵时返回的类:
pmax(0,x)
[1] 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
pmax(x,0)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 2 6
[2,] 0 0 0 3 7
[3,] 0 0 0 4 8
[4,] 0 0 1 5 9