我想使用两个向量和一个未知变量在R中绘制一个自定义函数。我想到了这样的事情:
# Define parameters
b<-c(1.70,4.70,7.60)
w<-c(0.38,0.44,0.50)
# Define function
k<-function(x){0.07*(w*(1-(x/-33)^(1/b)))^4}
# Plot
plot(k)
目标是绘制函数,得到三行。一行应包含第一对b向量/ w向量,第二行应包含第二对,第三行应包含最后一对向量。当我编译代码时,我收到一条错误消息:
1:In(x / -33)^(1 / b):较长的物体长度不是倍数 较短的物体长度2:在w *(1 - (x / -33)^(1 / b))中:较长的物体 长度不是较短物体长度的倍数
我的想法是,R想要将每个向量的所有值相互组合,这会导致错误消息。有没有解决错误的方法?
答案 0 :(得分:0)
这里的问题是plot
需要一个返回一个值而不是一个向量的函数。
一种解决方法是逐个循环b
和w
值,然后重新定义k
函数。我还更改了您的k
功能,因为它没有为默认参数定义。
k <- function(b, w) {
function(x){b*x+w}
}
plot2 <- function(k, b, w) {
plot(k(b[1], w[1]))
for (i in 2:length(b)) {
foo <- k(b[i], w[i])
curve(foo, add = TRUE)
}
}
plot2(k, b, w)
答案 1 :(得分:0)
如果我理解正确,这应该会给你想要的结果。
b<-c(1.70,4.70,7.60)
w<-c(0.38,0.44,0.50)
curve((0.07*w[1])*((1-(x/(-33))^1/b[1])^4), from=0, to=20, type = 'l')
for(i in 2:length(b))
{
curve((0.07*w[i])*((1-(x/(-33))^1/b[i])^4), from=0, to=20, add = TRUE)
}