Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何基于函数返回可能的变量对?_R - Fatal编程技术网

R 如何基于函数返回可能的变量对?

R 如何基于函数返回可能的变量对?,r,R,我有一对变量(x,y),每个变量都有一个可能的值范围(xmin,xmax和ymin,ymax)。我正在寻找这样的配对,基于一个函数将产生相同的概率 这是我返回概率的函数 f <- function(x, y) 1-exp(-(x^(1/0.9)+y^(1/0.9))^0.9) f我们可以计算所有可能组合的概率,并创建一个数据帧,该数据帧的组合满足我们的标准,具有一定的容差(用于浮点比较) tol我们可以计算所有可能组合的概率,并创建一个数据帧,该数据帧的组合满足我们的标准,具有一定的容

我有一对变量(x,y),每个变量都有一个可能的值范围(xmin,xmax和ymin,ymax)。我正在寻找这样的配对,基于一个函数将产生相同的概率

这是我返回概率的函数

f <- function(x, y) 1-exp(-(x^(1/0.9)+y^(1/0.9))^0.9)


f我们可以计算所有可能组合的概率,并创建一个数据帧,该数据帧的组合满足我们的标准,具有一定的容差(用于浮点比较)


tol我们可以计算所有可能组合的概率,并创建一个数据帧,该数据帧的组合满足我们的标准,具有一定的容差(用于浮点比较)

tol通过做一些数学运算(抱歉,So中不支持latex格式):

p=1-exp(-x^(1/0.9)+y^(1/0.9))^0.9)

ln(1-p)=-(x^(1/0.9)+y^(1/0.9))^0.9)

(-ln(1-p))^(1/0.9)-y^(1/0.9)=x^(1/0.9)

(-ln(1-p))^(1/0.9)-y^(1/0.9))^0.9=x

现在,如果我们将其放入一些R代码中,并检查结果是否不存在:

get_x <- function(P,y)
{
  x=((-log(1-P))^(1/0.9)-y^(1/0.9))^0.9
  # Verification of the results
  # If results no real (then x[i]=NaN) or if it does
  # not match the given probability (should never happens)
  # the results is set to NaN
  # This verification is for debugging only, should be removed
  for (i in c(1:length(y))){
    if(is.na(x[i]) | abs(P-1+exp(-(x[i]^(1/0.9)+y[i]^(1/0.9))^0.9))>0.00001)
    {
      x[i]=NaN
      print(paste0("Oops, something went wrong with y=",y[i]))
    }
  }
  return(x)
}

y_values=seq(0.01,0.99,by=0.001)
get_x(0.09,y_values)
get_x 0.00001)
{
x[i]=NaN
打印(粘贴0(“哎呀,y=,y[i])出了问题)
}
}
返回(x)
}
y_值=seq(0.01,0.99,by=0.001)
获取_x(0.09,y_值)
这非常快,现在只使用一个循环,而不是两个循环来填充矩阵,因此顺序是n而不是n^2(抱歉,so中不支持latex格式):

p=1-exp(-x^(1/0.9)+y^(1/0.9))^0.9)

ln(1-p)=-(x^(1/0.9)+y^(1/0.9))^0.9)

(-ln(1-p))^(1/0.9)-y^(1/0.9)=x^(1/0.9)

(-ln(1-p))^(1/0.9)-y^(1/0.9))^0.9=x

现在,如果我们将其放入一些R代码中,并检查结果是否不存在:

get_x <- function(P,y)
{
  x=((-log(1-P))^(1/0.9)-y^(1/0.9))^0.9
  # Verification of the results
  # If results no real (then x[i]=NaN) or if it does
  # not match the given probability (should never happens)
  # the results is set to NaN
  # This verification is for debugging only, should be removed
  for (i in c(1:length(y))){
    if(is.na(x[i]) | abs(P-1+exp(-(x[i]^(1/0.9)+y[i]^(1/0.9))^0.9))>0.00001)
    {
      x[i]=NaN
      print(paste0("Oops, something went wrong with y=",y[i]))
    }
  }
  return(x)
}

y_values=seq(0.01,0.99,by=0.001)
get_x(0.09,y_values)
get_x 0.00001)
{
x[i]=NaN
打印(粘贴0(“哎呀,y=,y[i])出了问题)
}
}
返回(x)
}
y_值=seq(0.01,0.99,by=0.001)
获取_x(0.09,y_值)


这非常快,现在只使用一个循环,而不是两个循环来填充矩阵,因此顺序n而不是n^2

我认为您仍然需要计算所有概率,以找出哪个具有特定值(0.01)。如果
matrix2
是具有所有概率组合的矩阵,你可以做
mat我明白你的观点,这是一个好主意,我认为它会起作用,唯一的一点是,我的矩阵中的概率不是整数,所以R不会找到0.01。我想在那里指示一个范围,比如说0.01±0.0001。如何将其添加到第一个命令中?谢谢你的帮助!如果给定x(好的旧纸和铅笔),您可以解析地找到屈服于所需概率的y,然后通过小步循环最小值和最大值之间的x值,并找到相应的y。最后检查y是否在所需范围内,以了解您是否保留该对。这可能会更快,因为在计算矩阵时,你只在一维而不是二维中求解。我认为你仍然需要计算所有的概率,以找出哪个概率有一定的值(0.01)。如果
matrix2
是具有所有概率组合的矩阵,你可以做
mat我明白你的观点,这是一个好主意,我认为它会起作用,唯一的一点是,我的矩阵中的概率不是整数,所以R不会找到0.01。我想在那里指示一个范围,比如说0.01±0.0001。如何将其添加到第一个命令中?谢谢你的帮助!如果给定x(好的旧纸和铅笔),您可以解析地找到屈服于所需概率的y,然后通过小步循环最小值和最大值之间的x值,并找到相应的y。最后检查y是否在所需范围内,以了解您是否保留该对。这可能会更快,因为在计算矩阵时,你只在一维而不是二维中求解。非常感谢!这正是我需要的:)这是可行的,但如果你事先做一些数学运算,你可以用更少的时间得到更精确的解computations@Chelmy88所以,我也在努力按照你的建议去做。我这样做了,但由于某种原因它不起作用,你能帮我吗?感谢probab,另外一件事是如何在循环中(对于一系列probab值)实现这一点…@AttilaBorsos请看我的新答案,您的数学题中可能有很多错误!这正是我需要的:)这是可行的,但如果你事先做一些数学运算,你可以用更少的时间得到更精确的解computations@Chelmy88所以,我也在努力按照你的建议去做。我这样做了,但由于某种原因它不起作用,你能帮我吗?谢谢probab,另外一件事是如何在循环中(对于一系列probab值)实现这一点…@AttilaBorsos看到我的新答案,你的数学可能有问题,现在很清楚了。令人困惑的是,我一开始并没有像你那样重新安排公式。代码很清楚,我刚刚运行了它,它工作得很好!再次感谢!是的,现在清楚了。令人困惑的是,我一开始并没有像你那样重新安排公式。代码很清楚,我刚刚运行了它,它工作得很好!再次感谢!