楼主: rockfido
10052 12

R中循环控制语句的问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1754份资源

博士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
2715 个
通用积分
0.0341
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
4441 点
帖子
201
精华
0
在线时间
202 小时
注册时间
2008-8-29
最后登录
2024-11-1

楼主
rockfido 在职认证  发表于 2010-4-24 00:16:21 |AI写论文
20论坛币
问题呢。。。。是这样的。。。。

我有一个MAIN FUNCTION用来做SIMULATION,我尽量把问题简单化:

for (i in 1:100){
    set.seed(i)
    a <- main(i) }

main <- function (var)
{b <-0/(i-50)
return b }

但是很明显,当i=50的时候,b的值为nan。我想知道有没有办法可以做一个控制语句,使得b为nan的时候,则不要这一次的结果,而是进行到下一个i的运算中去。
btw,忘记说了,我的程序中,如果b出现nan,则程序下面会无法运行下去,而出现错误提示。所以最好是在main里面加语句(比如,if is.nan(b) 则重新call main function。。。好像听起来很不太可行。。。),而不是if is.nan(a) { i =i+1....}这样的

不知道我是不是解释清楚了。。。谢谢大家!!

最佳答案

saiva 查看完整内容

12# rockfido ""我可以在上一步进行判断的,比如: main
关键词:Simulation function ulation ATION Main 语句

沙发
saiva 发表于 2010-4-24 00:16:22
12# rockfido

""我可以在上一步进行判断的,比如:
main <- function (var)
{bb<-(i-50)
b <-0/bb
return b }
我可以对bb进行判断,问题是,我不是说判断出bb为0,程序就终止,我希望的是,如果bb为0,就跳到下一个循环中,重新生成另一个随机数进行运算。就好象如果bb为0,则我需要再次重新call main function。。。。当然我知道在main function 里面肯定不能在call main function....这就是我纠结的地方。。。""""

是这样的,判断完之后用return就可以跳到下一个循环的...LZ看看return b;之后不就是跳到下一个循环吗?

藤椅
happyoldman 发表于 2010-4-24 04:40:21
please try:
for (i in 1:100){
       set.seed(i)
        if(i!=50){
                    a <- main(i)
       }
}

板凳
happyoldman 发表于 2010-4-24 04:43:45
please try:
for (i in 1:100){
       set.seed(i)
        if(i!=50){
                    a <- main(i)
       }
}
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewthread.php?tid=784903&page=1&from^^uid=240169

报纸
rockfido 在职认证  发表于 2010-4-24 09:54:44
3# happyoldman

thanks for ur help....but its b/c u know already it happens only at i=50....actually in my simulation, it caused by value that we cant predict.......

but thank u all the same

地板
saiva 发表于 2010-4-25 03:56:01
lz的意思是当c=0是b/c没有意义吗?  可以在mian函数里增加if语句,,,


for (i in 1:100)
{
    set.seed(i) ;
    a <- main(i) ;
}
main <- function (var)
{
   if((i-50)==0)
       return;
   else
{
       b <-0/(i-50);
       return b ;
}
}
不知道有没有语法错误,,对R不了解

7
rockfido 在职认证  发表于 2010-4-25 07:35:14
5# saiva

我想我确实没解释清楚。不过谢谢大家。

其实是这样的,我的MAIN FUNCTION里面有一个生成随机数的FUNCTION,比如说A是一个生成的随机数,然后用A进行运算,但是整个循环中,有的时候生成的A会使得下一步的运算是NAN,所以出现这种情况的时候,程序就会中断,但是我不想中断,希望程序继续运行下去,只是跳过这个不好的随机数,进行下一次的循环。

所以就想我之前回帖说的,不是说我可以知道i等于多少的时候会出问题,我不知道i等于多少的时候会出问题。。。。

不过非常感谢大家!!

8
saiva 发表于 2010-4-25 12:40:03
6# rockfido

LZ是不是用随机数做分母了?

b=0/(i-rand);如果是这样的话,改成
m=i-rand;
if(m==0)
return;
else{
   b=0/m;
return b;
}
或者是的原因
"""""""我的MAIN FUNCTION里面有一个生成随机数的FUNCTION,比如说A是一个生成的随机数,然后用A进行运算,但是整个循环中,有的时候生成的A会使得下一步的运算是NAN"""""""
//////////////////////////////
不要对A进行判断,什么时候会nan..看看nan产生的机制,如分母为零,解决方法和上面的类似

9
rockfido 在职认证  发表于 2010-4-26 09:16:51
7# saiva


确实是因为生成的随机数造成的分母为0的现象,但是不是这么简单,可以提前知道的。。。

其实是这样的。。。我的随机函数生成一个矩阵,然后对矩阵用了FACTOR FUNCTION,然后再进行一系列的统计运算,之后,才出现分母会为0的情况。。。这就是我为什么一定要在MAIN里面做判断的原因,因为不到那一部之前,我永远不知道出问题的到底是哪一个随机数。。。。

而且比如我的循环做50次,每次都要产生大概100个随机数,然后这100个随机数中,可能都没问题,也有可能有1,2个会出问题。。。。

10
saiva 发表于 2010-4-26 10:37:17
8# rockfido

不明白既然LZ已经知道是分母为0造成的,,,为什么不在分式的上一步判断一下呢??可能是你的算式太复杂难以拆分....

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 21:09