R 理解警告信息

R 理解警告信息,r,R,我的代码如下: m<-c(9,17,33,65,129,257,513) results<-matrix(,7,5) results[,1]<-m #methods trap<-function(a,b,m,func) { h=(b-a)/(m-1) x<-seq(a,b,h) y<-function(x) { z<-eval(parse(text=func)) return(z) } result<-h

我的代码如下:

m<-c(9,17,33,65,129,257,513)
results<-matrix(,7,5)
results[,1]<-m

#methods
trap<-function(a,b,m,func)
{
  h=(b-a)/(m-1)
  x<-seq(a,b,h)
  y<-function(x) { 
    z<-eval(parse(text=func)) 
    return(z) 
  }
  result<-h*(0.5* y(x[1]) + sum(y(x[2:(length(x)-1)]))+ 0.5*y(x[length(x)]) )
  result
}

所以我开始尝试去理解发生了什么,似乎所有的事情都指向这一点:
x您可以触发错误,这样traceback()就可以用于调试警告,尽管这里可能不需要这样做

 options(warn=2) # usual setting is 1
键入以下内容以查看函数在参数中看到的内容:

> c(a=0, b=5,m= results[,1])
  a   b  m1  m2  m3  m4  m5  m6  m7 
  0   5   9  17  33  65 129 257 513
这就是关于
seq(,by=)
获取过长参数的第一个警告的来源,(因为
h
将与'm'参数一样长。我认为这也解释了其他警告。我不知道如何获取警告()跳过第一个或最多第n个警告的机制,但如果您进入浏览器,您可以这样做:

?browser

您也可以搜索[r]调试的最佳实践

您确定您得到了预期的输出吗?不管我怎么看
?seq
,它看起来像“by”参数应该是一个数字,而不是示例中的向量。这就是您收到严重警告的原因,因为
h
不是单个数字,而是向量

序列(a,b,h)
中得到的序列非常奇怪:

> seq(a,b,h)
[1] 0.00000000 0.31250000 0.31250000 0.23437500 0.15625000 0.09765625 0.05859375
[8] 4.37500000 2.50000000
我认为
seq
是为生成单调序列而设计的,但从您的示例中得出的结果既不是单调的,也没有任何意义


你真的确定最终的结果是你所期望的吗?无论如何,这看起来像是误用了
seq
,除非我遗漏了什么。

谢谢@DWin。你能帮我理解
h
只要
m
就意味着什么吗?我可以轻易地放弃对(1:7中的I)陷阱(0,5,结果[I,1],“x^2”)的调用
进入一个循环,覆盖m的所有值,但这不是r“最优”还是我忽略这些警告?当您创建
h=(b-a)/(m-1)
a
b
是标量,但是
m
是一个向量,所以结果是一个向量。既然你没有真正告诉我们这些值应该是什么,或者你在做什么,除了向我们显示错误的代码,就不可能真正告诉你如何继续。呃,我想我必须把它放在一个循环中,除非任何人都知道另一种方法。但我认为这个答案最清楚地解释了警告信息,所以我会接受,但谢谢@DWin,你的答案总是很有帮助的!
> seq(a,b,h)
[1] 0.00000000 0.31250000 0.31250000 0.23437500 0.15625000 0.09765625 0.05859375
[8] 4.37500000 2.50000000