【问题标题】:logical operator TRUE/FALSE in RR中的逻辑运算符TRUE / FALSE
【发布时间】:2021-11-18 16:55:02
【问题描述】:

我编写了一个简单的函数,它产生输入(向量)的所有组合。这里的输入向量基本上是一个由 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 of x) 和 (min of y)。例如。第 2 行:我们有 4 个值(10、3、6、82)。这里 (3,6,82) 来自 x (x2,x3,x4) 而 10 基本上来自 y (y1)。因此 x 的最大值为 82,y 的最小值为 10。

所以我想要的是每行的两个值。

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

【问题讨论】:

  • 你能显示你的预期输出吗?
  • 16×2 的矩阵或数据框。最好是这样:对于每一行:(a, b)。例如,第 2 行:(82, 10)。
  • 这不清楚,我认为您需要重新制定您的方法 - 例如第 1 行中没有 y 值,第 16 行中同样没有 x 值,那么您怎么能期望每行中的最大 x 和最小 y 呢?
  • 第 1 行和第 16 行是特殊情况。像空的
  • @RonakShah 知道吗?我应该使用哪个逻辑函数?

标签: r logical-operators


【解决方案1】:

您可以将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

【讨论】:

  • 非常感谢。是否可以使用cat 得到以下格式(82, NA) 的输出?
  • 我看到您已经提出了一个新问题并得到了几个答案。
  • 我对这段代码有疑问。当 x 和 y 中存在共同元素时,程序将不起作用。我不知道如何实际解决这个问题。我已经发布了这个问题。如果您有时间,请给我反馈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多