【问题标题】:Setting min and max values for matrix cells when running a for loop in r在 r 中运行 for 循环时设置矩阵单元的最小值和最大值
【发布时间】:2014-05-25 03:01:14
【问题描述】:

我在 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 来自特定单元格,而不是此处所写的每个单元格,但我认为这不应该影响如何设置 min/最大?

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
}

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

【问题讨论】:

    标签: r for-loop matrix max min


    【解决方案1】:

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

    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
    }
    

    对于减法的情况。

    【讨论】:

      【解决方案2】:

      剪辑功能怎么样

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

      这会将所有值 &lt; min 设置为 min,并将所有值 &gt; max 设置为 max。因此,如果您从每个单元格中减去 0.9,您预计会有很多负数,但 clip 会将它们更改为 0

       clip(M-.9)
      

      添加 .9 也是如此

       clip(M+.9)
      

      或者是你试图减去最小值的问题?当做类似的事情时

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

      循环内的语句每次都对向量的每个元素进行操作。所以你真的减去了0.5。这可能太多了。

      【讨论】:

      • @BenBolker 但我们想找到所有单元格的最小值/最大值。不是行或列,对吗?还是我误解了这个问题。
      • 我只是要把clip()定义为pmin(max,pmax(min,x))
      • @BenBolker 啊。行。现在说得通了。
      • 我试过实现这个,但没有成功。我会继续尝试不同的东西。我发现添加 ifelse() 语句适用于特定单元格的解决方案。例如添加行 ifelse(M[3,4]
      • @jalapic “没有成功”是什么意思?您正在运行的代码到底是什么?它是如何失败的?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多