我在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
,我该如何在程序中调用它?
答案 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