R 在矩阵的每个元素上使用max

R 在矩阵的每个元素上使用max,r,matrix,max,R,Matrix,Max,使用pmax: [,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 您可以使用R的索引功能[直接执行此操作: pmax(x,0) # [,1] [,2] [,3] [,4] [,5] #[1,] 0 0 0 2

使用
pmax

     [,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

您可以使用R的索引功能
[
直接执行此操作:

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] [,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当输入为矩阵时,
pmax()
的参数顺序似乎会影响返回内容的类别:

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

@ManinMon-是的,不用担心。直接索引方法将更灵活,因为您可以使用其他逻辑运算符创建更复杂的条件。对于此任务,似乎
pmax()
的效率更高。这对我不起作用。我做了
>x=read.csv(…)>x2=sapply(data,atanh)>pmax(x2,-20)
但是这产生了一个
-20
的向量,而不是原始维度的矩阵。(注意
>类(x2)[1]“矩阵”
即使
>类(x)[1]“data.frame”
)@Chase他的解决方案确实有效。@TimKuipers
pmax
保留了对象的
dim
-你可能遗漏了一个步骤,或者你的
x2
不是矩形不。我犯的错误是,由于我的矩阵非常大,我尝试通过做
x2[1:10]
而不是
x2[1:10]来查看它的一部分
。我很抱歉!@TimKuipers np,很高兴你找到了答案
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
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