【问题标题】:Changing vector elements according to if condition根据 if 条件改变向量元素
【发布时间】:2018-04-24 07:51:12
【问题描述】:

我有 pos 作为具有 24 行和 2 列的数组索引矩阵。在第一列中,它包含值 1、2、3、4。

$position
      row col
 [1,]   4   6
 [2,]   1   6
 [3,]   4   5
 [4,]   2   6
 [5,]   1   5
 [6,]   3   6
 [7,]   4   4
 [8,]   2   5
 [9,]   1   4
[10,]   3   5
[11,]   2   4
[12,]   4   3
[13,]   1   3
[14,]   3   4
[15,]   2   3
[16,]   4   2
[17,]   3   3
[18,]   1   2
[19,]   2   2
[20,]   3   2
[21,]   4   1
[22,]   1   1
[23,]   2   1
[24,]   3   1

我试过代码

ch<-c(5,7,10,5)
C<-150
s<-c(1,1,1,1); s
cost<-sum(ch*s)
repeat
{
for(i in 1:24)
{
  for (j in 1:4)
  {
if (pos[i,1]==j) s[j]<-s[j]+1 else s
  }
  if (cost<C)
  {
    break
  }
}
}
s

这里 s 返回 s=c(1,1,1,4280236) 但结果应该是 s=c(5,6,6,5)

【问题讨论】:

  • 你期望什么输出?
  • As [24,] 显示第 3 行索引 s 应​​为 s=c(1,1,"2",1) pos[23,] 显示第 2 行索引 s 应​​变为 s=c (1,"2",2,1) pos [22,] 现在显示第一行索引 s 应​​该是 s=c("2",2,2,1) 同样对于 pos[21,] s=c(2 ,2,2,"2") 对于 pos[20,] s=c(2,2,"3",2) 对于 pos[19,] s=c(2,"3",3,2) 和很快。反逗号仅表示根据 pos.@RalfStubner 中的行索引更改的元素
  • 不清楚。请说明您需要做什么
  • 我要选取数组中尚未选取的最大值;将其与其行关联; (此结果存储在此处的“pos”矩阵中)如果包含这 1 个新单位的新成本是 chs,则将该行样本大小 (ss>C)停止而不将关联行的样本大小增加 1。 @Sotos
  • 我根据您的 cmets 更改了代码并获得了所需的结果 ' for(i in 24:1) { for(j in 1:4) { if (pos[i,1]= =j) s[j]=C) break } s; cost ' 导致 s=c(5,6,6,5), cost=152。感谢@jogo的回复

标签: r vector


【解决方案1】:
pos <- structure(c(4L, 1L, 4L, 2L, 1L, 3L, 4L, 2L, 1L, 3L, 2L, 4L, 1L, 
    3L, 2L, 4L, 3L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 6L, 6L, 5L, 6L, 5L, 
    6L, 4L, 5L, 4L, 5L, 4L, 3L, 3L, 4L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L), .Dim = c(24L, 2L), .Dimnames = list(NULL, c("row", "col")))
ch <- c(5,7,10,5)
C <- 150
s <- c(1,1,1,1)
for (i in 24:1) {
  # for(j in 1:4)
  # {
  #   if (pos[i,1]==j) s[j] <- s[j]+1  
  # }
  j <- pos[i,1]; s[j] <- s[j]+1
  cost <- sum(ch*s)
  if (cost>=C) break
}
s; cost

作为一种变体,可以遍历矩阵pos的第一列

for (j in pos[24:1, "row"]) {
  s[j] <- s[j]+1  
  cost <- sum(ch*s)
  if (cost>=C) break
}
s; cost

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多