确保矩阵中的值在设定范围之间?

dfj*_*328 2 r matrix

我是R的新手,我正致力于处理一组数据的功能.

我有一个20乘5的值矩阵,我在-1到1之间添加一个随机数.如何确保矩阵中的所有值以高效和快速的方式保持在0-10之间(不使用循环一次检查一个值).

这些是规则:

  • 如果值大于10,请将其更改为10
  • 如果某个值小于0,则将其更改为0

任何帮助表示赞赏.谢谢!

Ben*_*ker 5

就像是

m[] <- pmax(0,pmin(10,m))
Run Code Online (Sandbox Code Playgroud)

m[]在左侧(而非m)确保了基质保持其结构.

这是一个(可能是不必要的)示例:

lwr <- 0; upr <- 10
set.seed(101)
mRaw <- matrix(runif(100, lwr, upr), nrow=20) 
m1 <- sample(c(-1,1),size=100,replace=TRUE)
mAdded <- m1 + mRaw
Run Code Online (Sandbox Code Playgroud)

现在钳:

mAdded[] <- pmax(lwr,pmin(upr,mAdded))
str(mAdded)
## still a matrix: num [1:20, 1:5] 2.72 0 6.1 7.58 3.5 ...
range(mAdded)  ## 0 10
Run Code Online (Sandbox Code Playgroud)