我有一个由两列和一些(n)行组成的矩阵,而每行代表一个坐标为x和y(两列)的点。 这就是它的外观(LINK):
V1 V2
146 17
151 19
153 24
156 30
158 36
163 39
168 42
173 44
...
现在,我想使用从1开始的三个连续点的子集来做一些拟合,将这个值保存在另一个列表中,将密码保存到接下来的3个点,接下来的三个,。 ..直到列表完成。像这样:
Data_Fit_Kasa_1 <- CircleFitByKasa(Data[1:3,])
Data_Fit_Kasa_2 <- CircleFitByKasa(Data[3:6,])
....
Data_Fit_Kasa_n <- CircleFitByKasa(Data[i:i+2,])
我试图构建一个循环,但我不能让它工作。 R要么告诉我“}”中有“意外'}',要么”下标超出债券“。这就是我尝试过的:
最小可运行代码
install.packages("conicfit")
library(conicfit)
CFKasa <- NULL
Data.Fit <- NULL
for (i in 1:length(Data)) {
row <- Data[i:(i+2),]
CFKasa <- CircleFitByKasa(row)
Data.Fit[i] <- CFKasa[3]
}
RStudio Version 0.99.902 – © 2009-2016 RStudio, Inc.; Win10 Edu.
拟合圆的第三个元素(CFKasa [3])表示半径,这是我真正感兴趣的。我真的被困在这里,请帮忙。
非常感谢提前!
最好,大卫
答案 0 :(得分:0)
将数据转换为3D数组并使用apply
:
DF <- read.table(text = "V1 V2
146 17
151 19
153 24
156 30
158 36
163 39", header = TRUE)
a <- t(DF)
dim(a) <-c(nrow(a), 3, ncol(a) / 3)
a <- aperm(a, c(2, 1, 3))
# , , 1
#
# [,1] [,2]
# [1,] 146 17
# [2,] 151 19
# [3,] 153 24
#
# , , 2
#
# [,1] [,2]
# [1,] 156 30
# [2,] 158 36
# [3,] 163 39
center <- function(m) c(mean(m[,1]), mean(m[,2]))
t(apply(a, 3, center))
# [,1] [,2]
#[1,] 150 20
#[2,] 159 35
center(DF[1:3,])
#[1] 150 20