r中的循环问题

时间:2011-05-31 16:44:34

标签: r

我试图让我的r程序中的循环工作,但它没有给我我想要的结果。我试图建立一个保险合同的模型,其中有n个证券具有固定的违约矢量可能性(data [i,2])和支付矢量(data [i,1])。

我需要在安全级别和投资组合级别定价止损价值。为此,我为每个级别的条件向量创建了两个while循环(将由用户输入到函数中),一个循环扫描各种证券,最后一个循环来模拟各种场景。我尝试使用R的矩阵功能来帮助组织结果。

此代码的问题是if语句行为奇怪,没有正确激活和过滤。这会导致程序变慢并提供不良结果。它总是填充单个保护列,而不是将其置于似然向量上(data [i,2])。有很多活动部件,但总的来说它是一个简单的模型。

 y = years
nr=nrow(data1)
nc=ncol(data1)
isl =  individualStopLoss
asl = aggregateStoploss
Lasl = length(asl)
LIsl = length(isl)
claims = vector(mode = "logical",length= asl)
 individualProtection = matrix(0,ncol=LIsl,nrow=y)
 aggregateProtection = matrix(0,ncol=Lasl ,nrow=y)
expectedClaims = data1[,1]*data1[,2]
expectedClaims = sum(expectedClaims)
k = 1
m=1
    while (k<=y)
        {j = 1
         m = 1
         runi = runif(nr, min=0, max=1)
         while (m<=Lasl)
            {while (j<=LIsl)
                     {i=1
                       while (i<=nr) 
                           {if ( runi[i] < data1[i,2] )
                               {individualProtection[k,j] = individualProtection[k,j] + max(data1[i,1]-isl[j],0) 
                               claims[k] = claims[k] + data1[i,1]
                               i=i+1
                                }
                                else{i= i+1}
                           }
                        j=j+1
                     }        
            aggregateProtection[k,m]= aggregateProtection[k,m] + max(claims[k] - expectedClaims*asl[m],0)
            m = m+1
            }
        k = k+1
        }

1 个答案:

答案 0 :(得分:1)

只是一个帮助您提供可重现示例的示例,将在您的问题更新后删除。

data1 <- cbind(rnorm(1000),rnorm(1000))
y = sample(rep(1990:2011,1000),1000)
nr=nrow(data1)
nc=ncol(data1)
isl =  rnorm(500)
asl = rnorm(500)
Lasl = length(asl)
LIsl = length(isl)