> 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
Run Code Online (Sandbox Code Playgroud)
如何将"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
Run Code Online (Sandbox Code Playgroud)
edd*_*ddi 17
用途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
Run Code Online (Sandbox Code Playgroud)
您可以使用R的索引功能[直接执行此操作:
x <- array(-10:10, dim=c(4,5))
x[x < 0] <- 0
Run Code Online (Sandbox Code Playgroud)
这有效,因为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
Run Code Online (Sandbox Code Playgroud)
结果矩阵是:
[,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
Run Code Online (Sandbox Code Playgroud)
两种方法之间的时间惊人地相似.这是一个更大的例子来说明可比较的时间:
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
Run Code Online (Sandbox Code Playgroud)