繁体   English   中英

在R中运行for循环时设置矩阵单元的最小值和最大值

[英]Setting min and max values for matrix cells when running a for loop in r

我在for循环中运行代码,该代码对矩阵中的单个单元格进行了一些简单的算术运算。 矩阵的所有单元格都应始终具有介于0和1之间的值。矩阵中的值永远不应变为负数或超过1。我无法使用传统的“最小”和“最大”极限设置来计算此值。

示例数据:

x<-1:5
y<-runif(length(x)*length(x),0,1)
M<-matrix(y, length(x), length(x))

例如,从每个单元格中减去0.01(在我的实际情况下,在循环的每次迭代中要减去的0.01是来自特定的单元格,而不是这里编写的每个单元格,但是我认为这不会影响如何设置最小值/最大?

for (i in 1:50){
M[,]<-M[,]-0.01
}

例如,或者如果将0.01添加到矩阵的每个单元格:

for (i in 1:50){
M[,]<-M[,]+0.01
}

如果在上述任何一个for循环之后返回矩阵,则矩阵中的值将不会包含在0和1范围内,就像我希望的那样。 我对如何做到这一点感到困惑。

如果我正在做特定于矩阵的一个“单元”的事情,例如

for (i in 1:100){
M[3,4]<-M[3,4]-0.01
}

这会改变如何设置最小/最大值吗?

我认为有两种方法可以做到这一点:

1-事后

运行循环并获取结果(超出范围),然后使用以下命令将数据强制在最小值/最大值之内:

M[which(M<min)] = min
M[which(M>max)] = max

2-循环内

您可以修改您的赋值函数以读取

for (i in 1:50){
    M[which(M<max)] <- M[which(M<max)]+0.01
}

对于加法情况和

for (i in 1:50){
    M[which(M>min)] <- M[which(M>min)]-0.01
}

对于减法情况。

剪辑功能如何

clip<-function(x, min=0, max=1) {
    x[x<min]<-min; 
    x[x>max]<-max; 
    x
}

这将设置所有值<分钟到分钟,并且所有值> max与最大。 因此,如果您从每个单元格中减去.9,则可能会有很多负面影响,但是clip会将其变为0

 clip(M-.9)

添加.9也是一样

 clip(M+.9)

还是您要减去分钟数的问题? 当做类似的事情时

for (i in 1:50){
    M[,]<-M[,]-0.01
}

循环中的该语句每次都对向量的每个元素进行操作。 因此,您实际上要减去0.5。 可能太多了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM