R中的循环条件

时间:2017-01-13 00:09:53

标签: r loops

我有以下r代码

x =c(1.7, 2.2,   14.4, 1.1,  .4, 20.6, 5.3, .7, 1.9, 13, 12, 9.3, 1.4, 18.7, 8.5, 25.5, 11.6, 
     14.1, 22.1, 1.1, 2.5, 14.4, 1.7, 37.6 ,.6, 2.2, 39, .3, 15, 11, 7.3, 22.9, 1.7, .1, 1.1, 
     .6, 9, 1.7, 7,  20.1, .4, 2.8, 14.1, 9.9, 10.4, 10.7, 30, 3.6, 5.6, 30.8, 13.3, 4.2, 25.5, 
     3.4, 11.9, 21.5, 27.6, 36.4, 2.7, 64, 1.5, 2.5, 27.4, 1, 27.1, 20.2, 16.8, 5.3, 9.7, 27.5, 
     2.5, 27)

n=length(x)

k=matrix(c(-1,-0.5,0,0.5,1), nrow=5, ncol=1)  

gamma=0.1               

lambda=matrix(c(0,0.25,0.5,0.75,1), nrow=5, ncol=1)                 

    f<-matrix(data=NA, nrow=72, ncol=5)

for (i in 1:5)

{f[,i]<-((k[i,])*(.1^(k[i,])/(x^(k[i,]+1))))*((1-
  lambda[1])+2*lambda[1]*((.1/x)^(k[i,])))
}

该函数的结果基于k的不同值和lambda的一个值。我想要做的是创建一个25乘72的矩阵,并根据k和lambda的不同值计算结果。因此,所谓的结果矩阵的前五列将是k值和λ第一值的结果,第6-10列将是基于k值和第二λ值的结果,依此类推。

1 个答案:

答案 0 :(得分:1)

看起来像是一个嵌套的for循环

x <- c(1.7, 2.2,   14.4, 1.1,  .4, 20.6, 5.3, .7, 1.9, 13, 12, 9.3, 1.4, 18.7, 8.5, 25.5, 11.6, 
     14.1, 22.1, 1.1, 2.5, 14.4, 1.7, 37.6 ,.6, 2.2, 39, .3, 15, 11, 7.3, 22.9, 1.7, .1, 1.1, 
     .6, 9, 1.7, 7,  20.1, .4, 2.8, 14.1, 9.9, 10.4, 10.7, 30, 3.6, 5.6, 30.8, 13.3, 4.2, 25.5, 
     3.4, 11.9, 21.5, 27.6, 36.4, 2.7, 64, 1.5, 2.5, 27.4, 1, 27.1, 20.2, 16.8, 5.3, 9.7, 27.5, 
     2.5, 27)
k <- c(-1,-0.5,0,0.5,1)
lambda <- c(0,0.25,0.5,0.75,1)                 
f <- matrix(, nrow = 72, ncol = 25)

for (i in seq_along(lambda)) {
  for (j in seq_along(k)) {
    f[, (i - 1) * 5 + j] <- k[j] * .1 ^ k[j] / x ^ (k[j] + 1) * (1 - lambda[i]) + 2 * lambda[i] * (.1 / x) ^ k[j]
  }
}

有可能用嵌套的sapply来写这个,但这可能更容易理解,因为它是一个相当长的等式