我是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,]
}
}
我也尝试过各种各样的括号
请帮忙。
答案 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