【问题标题】:Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differxy.coords(x, y, xlabel, ylabel, log) 中的错误:“x”和“y”长度不同
【发布时间】:2020-04-07 17:48:31
【问题描述】:

我正在定义一个函数并尝试为x > max{b1,b2} 绘制它:

b1<-1
b2<-2
b<-1
l<-1
fn <- function(x,b1,b2,b,l){
         result <- b/x * ((1-(sqrt(1-(b1/x)^l)*sqrt(1-(b2/x)^l)))^(- 1/l))
         return(result)
          } 
fn1 <- fn(x,b1,b2,b,l)
x<-seq(3,20,0.1)
plot(x,fn1,type="l")

它适用于这些值,但是当我按如下方式更改 x 时 x

Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differ

你能建议这里的错误是什么吗?怎么去掉?

【问题讨论】:

    标签: r


    【解决方案1】:

    不确定在 b/x 项之后你想要什么操作,但是它读取 [ ] 作为索引,尝试:

    fn <- function(x,b1,b2,b,l){
      result <- b/x * (1-(sqrt(1-(b1/x)^l)*sqrt(1-(b2/x)^l)))**(- 1/l)
      return(result)
    } 
    

    【讨论】:

    • 感谢您的回复。正如您在上面看到的,我已经相应地更改了代码,但仍然出现错误。知道为什么会这样吗?是因为x吗?
    • 向量 x 是在执行函数 fn 后定义的,需要 x。看起来它正在使用 x 的先前定义。尝试在函数之前定义它
    【解决方案2】:

    函数中的结果行有不正确的语法。应该是这样的

    result <- b/x*(1-(sqrt(1-(b1/x)^l)*sqrt(1-(b2/x)^l)))*(- 1/l)
    

    注意区别:

    • 不使用[ ],因为它们的含义与R中的( )不同。
    • 乘法 * 已在整个过程中得到修复

    【讨论】:

    • 非常感谢。我已根据您的建议更正了代码,但在为 x > 3(如 b2=3)绘制此函数时仍然出现错误。你知道这里出了什么问题吗?
    • 正如@Tur 在他的 cmets 中提到的,您需要在调用函数之前定义 x
    猜你喜欢
    • 2021-07-05
    • 2017-06-26
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2021-08-18
    相关资源
    最近更新 更多