3

ベクトルの各値に関連付けられた関数の積分を計算したいと考えています。例を使用して、私は次のように私の目的を正確に説明します。

xyは独立確率変数であり、はその場合またはそうでないIような指標変数であるとします。指数分布から y の描画を作成したいのですが、描画ごとに、 の分布に対する の積分を計算したいと考えています。この分布をパラメータ値 1 の指数分布にしたい。 で次のコードを試しました。I=1y > 0.25xzerong = xf(x)Ixf(x)r

f = function(n){
  h = list()
  g = numeric()
  y = rexp(n)
  for(i in 1:n){
    h[i] = function(x){(x * dexp(x) * (y[i] > 0.5*x))}
    g[i] = integrate(h[i], lower=-Inf, upper=Inf)
  }
  return(summary(g))
}

しかし、その後 f(3) を実行するとエラーメッセージ " が表示されます*Error in h[i] = function(x) { : cannot coerce type 'closure' to vector of type 'list'"*。しかし、次のコードを実行すると

y = rexp(1)
h = function(x){x * dexp(x) * (y > 0.5*x)}
integrate(h, lower=-Inf, upper=Inf)
f(3)

結果が出ます。h関数が の各値で評価されy、出力が でありfunction、それが関数に渡されるように、このコードを改善する方法について誰かが提案していgますか?

4

2 に答える 2

1

ではなく[[サブセット化するために使用する必要があります。これは、コンテンツではなくサブリストを返すためです。また、複雑な構造を返します。値だけが必要な場合は、 with を追加してそれを選択します。h[[integrate$value

f = function(n){
  h = list()
  g = numeric()
  y = rexp(n)
  for(i in 1:n){
    h[[i]] = function(x){(x * dexp(x) * (y[i] > 0.5*x))}
    g[i] = integrate(h[[i]], lower=-Inf, upper=Inf)$value
  }
  return(summary(g))
}

f(3)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.2456  0.3269  0.4082  0.4069  0.4876  0.5669 
于 2013-11-11T12:53:15.620 に答える