R中循环中的可变数据

时间:2016-11-16 08:29:11

标签: r loops

我有下面的代码,上面有一个循环,其中包含一个值foreach($_FILES[ 'file' ] as $k=> $v ) { $arr[ $k ] = array( $v ); }

X

我想知道我可以将我的X设置为n = 25 X = 1 p = 0.2 #probability P = matrix( c(p, 1-p, 0, 0, 0, 0, p, 0, 1-p, 0, 0, 0, p, 0, 0, 1-p, 0, 0, 0, p, 0, 0, 1-p, 0, 0, 0, p, 0, 0, 1-p, 0, 0, 0, p, 0, 1-p), ncol=6, nrow=6, byrow = TRUE) #transition matrix for(i in 1:n){ Y = runif(1) #uniform sample k = P[X[i], ] #calculate k values k = cumsum(k) if(Y <= k[1]){ #update the chain X[i+1] = 1} else if(Y <= k[2]){ X[i+1] = 2} else if (Y <= k[3]){ X[i+1] = 3} else if (Y<=k[4]){ X[i+1] = 4} else if (Y<=k[5]){ X[i+1] = 5} else {X[i+1]=6} } plot(1:n, X[1:i], type = 's') 这样的多数据,这样我就可以只在一行代码中运行X = c(1,3,4)的所有三个值而无需重新模拟更改X的值?结果应该产生三个图表。

1 个答案:

答案 0 :(得分:0)

首先,如果您想重新使用该代码,则需要将代码放在函数中。其次,在您发布的代码中,您在图形设备中绘制图形,在您绘制其他内容后将丢失图形,因此您可能希望将其保存为PDF或PNG或类似的内容:

xtoplot <- function(X, n = 25, p = 0.2, transit = P){
  for(i in 1:n){
    Y <-  runif(1)         # uniform sample
    k <-  P[X[i], ]        # calculate k values
    k <-  cumsum(k)   
    if(Y <= k[1]){         # update the chain
      X[i+1] <-  1}
    else if(Y <= k[2]){
      X[i+1] <-  2}
    else if(Y <= k[3]){
      X[i+1] <-  3}
    else if(Y <= k[4]){
      X[i+1] <-  4}
    else if(Y <= k[5]){
      X[i+1] <-  5}
    else{
      X[i+1] <- 6}
  }

  pltname <- paste0("plot_", X, ".pdf")     # The document name of the plot

  pdf(pltname)                    # Tell R to prepare to export something to PDF
  plot(1:n, X[1:i], type = 's')   # The plot to be exported
  dev.off()                       
}

现在该功能已经到位,您可以使用&#34; apply() - 家庭&#34;的成员。为X运行多个输入值的函数,如下所示:

lapply(c(1,3,4), xtoplot)

在您的工作目录中,您将找到三个PDF,名为plot_1.pdf,plot_3.pdf和plot_4.pdf,其中包含您要查找的图表。