-1

Rを使用して多変量確率密度関数を作成し、パースペクティブプロットとしてプロットしたいと思います。f(x、y)は、[0,1]*[0,1]の場合はx+y、それ以外の場合は0です。私はこれを試しました:

x <- seq(-0.5,1.5,length=50)*seq(0.5,1.5,length=50)
y <- x

f <- function(x,y){
  if (0<=x<=1 && 0<=y<=1){
    x+y
  } else {
    0
  }
}
f(x,y)  

しかし、関数が機能しておらず、修正方法がわかりません。誰かアイデアがありますか?

4

1 に答える 1

3

まず第一に、あなたのif発言は間違っています。これにより、ifステートメントは修正されますが、それでもエラーが発生します。

x <- seq(-0.5,1.5,length=50)*seq(0.5,1.5,length=50)
y <- x

f <- function(x,y){
  if (0<=x & x<=1 & 0<=y & y<=1){
    x+y
  } else {
    0
  }
}

f(x,y) 

f1 <- function(x,y){
  cond <- 0<=x &x<=1 & 0<=y&y<=1
  ifelse(cond, x+y, 0)
}

f1(x,y)
[1] 0
Warning message:
In if (0 <= x & x <= 1 & 0 <= y & y <= 1) { :
  the condition has length > 1 and only the first element will be used

関数にベクトル引数を与えるには、関数をベクトル化する必要があります。1つの方法は、とifelseのベクトル化されたバージョンである関数を使用することです。ifelse

f1 <- function(x,y){
  cond <- 0<=x & x<=1 & 0<=y & y<=1
  ifelse(cond, x+y, 0)
}

f1(x,y)
 [1] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
 [9] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.04685548 0.11224490 0.18096626
[17] 0.25301958 0.32840483 0.40712203 0.48917118 0.57455227 0.66326531 0.75531029 0.85068721
[25] 0.94939608 1.05143690 1.15680966 1.26551437 1.37755102 1.49291962 1.61162016 1.73365264
[33] 1.85901708 1.98771345 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
[41] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
[49] 0.00000000 0.00000000
于 2012-11-08T10:28:13.383 に答える