2016-10-30 15 views
1

私はループ内に反復を持っていますが、反復内に単一の値を格納する変数bを持っています。bの値は、私が直面している問題は、各反復中にbの各値を呼び出す方法がわからず、繰り返し実行中にこれが本当に必要なことです。例えば、反復がレベル2であったときに、bの値を、反復がレベル4にあるときに同じ値のbに追加したいとします。bを印刷すると、正しい答えが得られますが、それぞれを呼び出す方法はわかりません反復中のbの値R内の反復内の変数に対して反復された各値を呼び出す方法

注:bはベクトルではなく、繰り返し内で計算される単一の値変数です。親切に私は私のプログラム内で呼び出すか、どのように私は反復レベルが3と4のとき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 

を下回っている

# 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) 
} 

以下の私のコードを参照してください?

+0

ループ内で 'b'の値を使用する方法を尋ねるのですか、ループが完了した後にそれを持つように' b'が各反復で取る値をコンパイルする方法を尋ねていますか? –

+0

私は反復の中の各bの値を知りたいと思います。たとえば、bの値を使う反復の中で別の変数cを計算したいとします。たとえば、私はci = bi + bi-1を計算したいと思います。たとえば、iterationがレベル3にあるとき、私はc3 = b3-b2を計算したいと思います。ここで、b3は反復がレベル3にあるときのbの値であり、b2は反復がレベル2にあるときのbの値です。 – Dare

答えて

0

bは、既に長さ1のベクトルです。しかし、bをこのような複数の長さのベクトルとして格納することができます。b[i] <- round((yr-yl)/(xr-xl),digits=3)、次にb[i]で必要な繰り返しのいずれかにアクセスします。

+0

問題は、b [i]を使用すると、確かに答えを訂正しない。 b(i *)y = round((yr-yl)/(xr-xl)、digits = 3) print(b [i]) a = – Dare

+0

あなたの 'for'ループ内で' b 'のすべてのインスタンスを 'b [i]'に変更する必要があります。もしそうでなければ、Rは操作で 'b'を使うときに他の変数をリサイクルしようとします。 – seasmith

+0

ありがとうございました。 – Dare

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 
関連する問題