如何在R

时间:2016-10-30 00:14:14

标签: r

我在R中有一个循环for-iteration,我有一个变量b,它在迭代中存储一个值,b的值可以在每次迭代时改变,问题我'面对的是我不知道如何在每次迭代期间调用b的每个值,我在迭代期间确实需要这个。例如,当迭代处于第4级时,我希望在迭代处于第2级时将b的值添加到b的相同值。如果我打印出b,它会给我正确的答案,但我不知道如何在迭代过程中调用b的每个值。

注意:b不是向量,它是在迭代内计算的单个值变量。请看下面的代码

# Assignment for the resistant line
x <- c(51.3, 49.9, 50, 49.2, 48.5, 47.8, 47.3, 45.1, 46.3, 42.1, 44.2, 43.5, 42.3, 
    40.2, 31.8, 34)
y <- c(102.5, 104.5, 100.4, 95.9, 87, 95, 88.6, 89.2, 78.9, 84.6, 81.7, 72.2, 65.1, 
    68.1, 67.3, 52.5)
n <- 3

df = data.frame(x, y)
data = df[order(x), ]


# Partition <- function(x,n) split(x,factor(sort(rank(x)%%n)))

x = data$x
y = data$y

for (i in 1:10) {

    Partition1 <- split(x, factor(sort(rank(x)%%n)))
    Partition1
    xl = median(Partition1[[1]])
    xm = median(Partition1[[2]])
    xr = median(Partition1[[3]])

    Partition2 <- split(y, factor(sort(rank(y)%%n)))
    Partition2
    yl = median(Partition2[[1]])
    ym = median(Partition2[[2]])
    yr = median(Partition2[[3]])


    b = round((yr - yl)/(xr - xl), digits = 3)


    a = round(((yl + ym + yr) - (b * (xl + xm + xr)))/3, digits = 2)

    yfit = a + (b * x)
    yres = round(y - yfit, digits = 2)
    df1 = data.frame(x, y, yfit, yres)
    df2 = data.frame(xl, xm, xr, yl, ym, yr, b, a)
    if (i > 0) {
        y = yres
    }
    # print(df1) 
    # print(df2)
    print(b)
}

b输出低于

[1] 3.412
[1] -0.872
[1] 0.624
[1] -0.484
[1] 0.374
[1] -0.293
[1] 0.23
[1] -0.18
[1] 0.14`
[1] -0.109

例如,如果我想在迭代级别为3和4时检索b,我该如何在程序中调用它?

2 个答案:

答案 0 :(得分:0)

b已经是一个向量 - 长度为1的向量。但是,您可以将b存储为多个长度的向量,例如b[i] <- round((yr-yl)/(xr-xl),digits=3),然后使用b[i]访问您需要的b的任何迭代。

答案 1 :(得分:0)

我认为这就是你想要的。如果我误解了,请告诉我。

b.permanent <- NA

for(i in 1:10){

  Partition1 <- split(x,factor(sort(rank(x)%%n)))
  Partition1
  xl= median(Partition1[[1]])
  xm= median(Partition1[[2]])
  xr= median(Partition1[[3]])

  Partition2 <- split(y,factor(sort(rank(y)%%n)))
  Partition2
  yl= median(Partition2[[1]])
  ym= median(Partition2[[2]])
  yr= median(Partition2[[3]])


  b = round((yr-yl)/(xr-xl),digits=3)

  a = round(((yl+ym+yr) -(b*(xl+xm+xr)))/3,digits=2)

  yfit= a + (b*x)
  yres=round(y-yfit,digits=2)
  df1 = data.frame(x,y,yfit,yres)
  df2=data.frame(xl,xm,xr,yl,ym,yr,b,a)
  if(i>0){
    y =yres
  }
  b.permanent <- c(b.permanent, b)
}

b.permanent <- b.permanent[!is.na(b.permanent)]
b.permanent
 [1]  0.085 -0.067  0.053 -0.042  0.032 -0.025  0.020 -0.016  0.012 -0.009