我想用 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)
但是该功能不起作用,我不知道如何修复它。有人有想法吗?
我想用 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)
但是该功能不起作用,我不知道如何修复它。有人有想法吗?
首先你的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
您需要对函数进行矢量化以便为其提供矢量参数。一种方法是使用函数ifelse
,它是if
和else
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