全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
6625 2
2010-12-28
R的数值积分要使用integrate命令,我在做循环运算的时候遇到下列问题:

# f是被积函数,显然f在0出是无限的
f <- function(x) {return(1/x)}

# 循环运算
for (i in 0:4) {
g[i] <- integrate(f, lower=i, upper=7, stop.on.error=FALSE
}
g                           # 输出g

# 错误信息
错误于integrate(f, lower = i, upper = 7, stop.on.error = FALSE) :
  non-finite function value
错误: 找不到对象'g'

# 我的问题
从上面的结果可以看出,当integrate发生一次循环发生错误后(显然第一次便发生这种情况),
就跳出了整个循环(因为g不存在)。我的期望是,如果integrate的一次循环发生错误,就让它
跳到下一次循环,而不要跳出整个循环。请问各位高手,如何才能实现我的期望呢?我尝试了
很多,一直无法实现。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-12-28 22:41:17
你的错误信息是因为你没有给g赋初值,而不是循环发生错误。
还有integrate的结果不是一个数,而是一个list,应该用integrate(...)$value
虽然当积分限从0开始的时候积分是发散的,但是此处的数值积分不会有这个错误。所以R不会报任何的错误。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-12-29 09:35:03
再问:
    非常谢谢楼上的回复,但不好意思,实在抱歉,仓促间,没将问题想好。下面是我真正想问的问题(试了很多遍了)

m <- rep(NA, 6)                                     # 对m进行赋值,等同于原来的g, 无论是NA,还是0,结果都相仿

f <- function(x) {return(1/x)}                  # 被积函数

for (i in -1:4) {
m[i+2] <- integrate(f, lower=i, upper=7, stop.on.error=FALSE)$value        # 循环,赋值
}
m                                                                              # 输出m

输出结果:
错误于integrate(f, lower = i, upper = 7, stop.on.error = FALSE) :
  non-finite function value
> m
[1] NA NA NA NA NA NA

# 评论: 其实,在第一次循环时,就会发生积分函数值无限的错误,但这个错误导致后面的
         循环无法进行。这是因为,如果后面的循环可以进行,那么m的第二、三、四、五和六
         个元素不应该还是原来的空值。我的期望结果是,即使一次积分运算发生错误,如何让
         它进行 下一次积分,而不是跳出整个循环?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群