for循环结合功能输出增加值

时间:2015-10-15 16:40:33

标签: r function loops

l=0
for (j in (1:5)){
  test(j)
}

test<-function(x){
  x
  l=l+0.25
  print(l)
}


I am expecting.
[1] 0.25
[1] 0.50
[1] 0.75
[1] 1.00
[1] 1.25

But, all I got is.
[1] 0.25
[1] 0.25
[1] 0.25
[1] 0.25
[1] 0.25

这是我的代码的简化版本。 我试图让每次运行函数时都不断增加。 有人可以给我一些建议吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

不确定你的最终目标是什么,但也许这会有所帮助。

       *
      ***
     *****
    *******
   *       *
  ***     ***
 *****   *****
******* *******

答案 1 :(得分:0)

boxplot(U_percent_all, names=U_name, main=sprintf(("I_Common chr%s vs Tissue \n (unstable)"),i), 
        ylab="GC content", ylim=c(0,1), na.action = TRUE)
abline(h=chr_gc[i,2], col="red")l=0
for (z in (1:5)){
  seg.fun.U(z)
}

seg.fun.U <- function(x){
for ( j in x:ncol(U_percent_all)){
if ((is.na(U_percent_all[,j])==TRUE) || (is.na(U_percent_all[,x])==TRUE)){
  next
}
else if (as.numeric(summary(is.na(U_percent_all[,j]))["FALSE"]<=2)){
  next
}
else if (as.numeric(summary(is.na(U_percent_all[,x]))["FALSE"]<=2)){
  next
}
n<-NULL
n<-t.test(U_percent_all[,x],U_percent_all[,j])$p.value
print(n)
if ((n <= 0.05)==TRUE){
  if ((n <=0.01)==TRUE){
    if ((n <=0.001)==TRUE){
      segments(x0=1, x1=j, y0=0.8+l,y1=0.8+l, col=1)
      text(x=j,y=0.82+l,"***")
      l=l+0.3
    }
    else{
      segments(x0=1, x1=j, y0=0.8+l,y1=0.8+l, col=1)
      text(x=j,y=0.82+l,"**")
      l=l+0.3
    }
  }
  else{
    segments(x0=1, x1=j, y0=0.8+l,y1=0.8+l, col=1)
    text(x=j,y=0.82+l,"*")
    l=l+0.3
  }
 }
}

}

基本上,我试图绘制一个图形并在每对上面添加重要的线条。 在U_percent_all数据框中,有五列。并且,我想比较每两对的重要线。 为了避免较长的线覆盖较短的线,每条线需要在一个高度上绘制。这就是我尝试这种方式的原因。