用向量调节

时间:2011-05-17 18:48:40

标签: r

我是r。

的新手

我有一个有序对的向量(长度为100)。我还有一个1和0的向量(长度也是100)。每当另一个向量在同一个位置有一个1时我想“反转”有序对,当有一个0时我保持不反转。我试过(天真无望)

for (i in 1:100) {
  if (flip[i]=1) {
    pair[i,] = rev(pair[i,])
  } else {
    pair[i,] = pair[i,]
  }
}

我也尝试过各种各样的括号

请帮忙。

2 个答案:

答案 0 :(得分:4)

您的代码不起作用,因为=用于分配,==用于逻辑比较。这有效:

flip = sample(c(0,1), 100, replace=TRUE)
pair = array(1:200, dim=c(100,2))

for (i in 1:100) {
  if (flip[i]==1) {
    pair[i,] = rev(pair[i,])
  } else {
    pair[i,] = pair[i,]
  }
}

也就是说,这种问题有一些方便的矢量化解决方案(正如@Prasad所证明的那样)。

答案 1 :(得分:3)

举一个小例子:

pair <- matrix(1:10,5,2)
flip <- c(1, 0, 0, 1, 0)
> pair
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

然后,您可以使用:

翻转所需的pair
pair[flip==1,] <-  pair[ flip == 1, 2:1 ]

> pair
     [,1] [,2]
[1,]    6    1
[2,]    2    7
[3,]    3    8
[4,]    9    4
[5,]    5   10