在R中绘图:具有两个向量

时间:2016-10-03 07:46:32

标签: r vector

我想使用两个向量和一个未知变量在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想要将每个向量的所有值相互组合,这会导致错误消息。有没有解决错误的方法?

2 个答案:

答案 0 :(得分:0)

这里的问题是plot需要一个返回一个值而不是一个向量的函数。

一种解决方法是逐个循环bw值,然后重新定义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)
}