r - 如何识别输出低于某个阈值的两个变量的哪些组合?

标签 r combinations combn

我有一个 R 编码问题想要分享。假设我们有以下内容:

z1= c(2, 4, 6, 8)
s1= seq(-13, 14, by = 0.1)
s2= seq(-13, 14, by = 0.1)

Function<-function(s1,s2){
  Y<-matrix(0,nrow=length(s1),ncol=length(z1))
  for (j in 1:length(s1)){
    for (i in 1:length(z1)){
      Y[j,i]<- s1[j]*s2[j] + z1[i]}}
  return(Y)
 }

因此,s1 和 s2 是输入,它们可以具有区间 [-13, 14] 中的任何值。它们每次可以具有相同的值,也可以具有不同的值。 现在,我想知道如何识别 s1 和 s2 的哪些组合产生的输出点(全部)小于某个阈值,比如 20。例如,如果 s1= 2s2= 4那么我们知道上面的函数有四个输出(四个因为 i=1,...,4),如下:

Y= 8+ 2 for i=1
Y= 8+ 4 for i=2
Y= 8+ 6 for i=3
Y= 8+ 8 for i=4

在这种情况下,所有这些输出都小于 20,因此可以选择组合 (2,4)。但是,如何将其应用于 s1 和 s2 可能值的整个范围,然后仅选择那些输出均小于 20 的组合?任何提示都非常有用。

谢谢!

最佳答案

对于两个不同长度的向量,您可以使用 expand.grid + apply:

#Create the vectors
s1 = seq(2, 5, by = 1)
s2 = seq(0, 3, by = 1)
z1 = c(2, 4, 6, 8)

#I simplified your function
f <- function(x1, x2) sapply(x1 * x2, `+`, z1) 

gr <- expand.grid(s1, s2)
gr[apply(gr, 1, \(x) all(f(x[1], x[2]) <= 20)), ]

关于r - 如何识别输出低于某个阈值的两个变量的哪些组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76819440/

相关文章:

r - 如何在 R 中导出时间序列模型?

r - 在多行中打印带有列名的 R 数据框

r - 在 R 中生成非重复组合对

python - 查找具有给定总和的数字列表的所有组合

r - 根据观察复制和修改数据帧的行 [R]

r - 根据组合为列表中的数据框分配名称

r - 数据框列表第一列到行名

r - 将非标准字符串日期转换为 R 中的日期对象

c - 如何使用 C 中的递归为 0,1 生成 4 位二进制组合?