r中的逻辑运算符TRUE/FALSE



我编写了一个简单的函数,生成输入(一个向量)的所有组合。这里的输入向量基本上是4个坐标(x, y)的序列,就像函数中提到的a, b,c和d。

intervals<-function(x1,y1,x2,y2,x3,y3,x4,y4){
a<-c(x1,y1)
b<-c(x2,y2)
c<-c(x3,y3)
d<-c(x4,y4)
union<-expand.grid(a,b,c,d)
union
}
intervals(2,10,3,90,6,50,82,7)

> intervals(2,10,3,90,6,50,82,7)
Var1 Var2 Var3 Var4
1     2    3    6   82
2    10    3    6   82
3     2   90    6   82
4    10   90    6   82
5     2    3   50   82
6    10    3   50   82
7     2   90   50   82
8    10   90   50   82
9     2    3    6    7
10   10    3    6    7
11    2   90    6    7
12   10   90    6    7
13    2    3   50    7
14   10    3   50    7
15    2   90   50    7
16   10   90   50    7
> 

现在我想找到(max (x))和(min (y))对于给定输出的每一行。例如,第2行:我们有4个值(10,3,6,82)。这里(3,6,82)来自x (x2,x3,x4) 10基本上来自y (y1)因此x的最大值是82,y的最小值是10。

我想要的是每一行的两个值

我实际上不知道如何处理这种逻辑命令。有什么想法或建议吗?

可以将xy矢量分别传递给函数。使用expand.grid创建向量的所有组合,并从每行中获得xmaxymin

intervals<-function(x, y){
tmp <- do.call(expand.grid, rbind.data.frame(x, y))
names(tmp) <- paste0('col', seq_along(tmp))
result <- t(apply(tmp, 1, function(p) {
suppressWarnings(c(max(p[p %in% x]), min(p[p %in% y])))
}))
result[is.infinite(result)] <- NA
result <- as.data.frame(result)
names(result) <- c('max_x', 'min_x')
result
}
intervals(c(2,3,6,82), c(10, 90, 50, 7))
#   max_x min_x
#1     82    NA
#2     82    10
#3     82    90
#4     82    10
#5     82    50
#6     82    10
#7     82    50
#8     82    10
#9      6     7
#10     6     7
#11     6     7
#12     6     7
#13     3     7
#14     3     7
#15     2     7
#16    NA     7

最新更新