我必须为一个项目制作一张4 * 4的Kohonen地图。
但是,我得到了错误
win_index [1,]错误:下标超出范围
另外:有16条警告(使用警告()查看它们)
在测试我的代码之后,我猜想它不是lapply函数(第77行) 由于创建的矩阵仅包含NA,因此无法正确执行。 因此,由于此矩阵稍后使用,因此结果不正确,因为 整个程序中都没有NA。
#############################################
##Function for distance calculation (RMSDA)##
#############################################
RMSDA<-function(data_phipsi,Kohonen_matrix)
{
difference<-data_phipsi-Kohonen_matrix
for(j in 1:length(difference)){
if (difference[j]< -180) {difference[j]=difference[j]+360}
if (difference[j]> +180) {difference[j]=difference[j]-360}
}
distance=mean(sqrt(difference^2))
return(distance)
}
##############################
## Program ###
##############################
for(step in 1:iteration)
{
data_phipsi<-data_phipsi[sample(nrow(data_phipsi)),] # Sample vectors of training (samples of lines of the dataframe)
print(step) #Visualize where we are in loops
for(k_row in 1:nrow(data_phipsi))
{
#Update learn_rate and radius at each row of each iteration
learn_rate<-learning(initial_rate,((step-1)*nrow(data_phipsi))+k_row,data_phipsi)
learn_radius<-learning(initial_rate,((step-1)*nrow(data_phipsi))+k_row,data_phipsi)
#Find distance between each vectors of angles of Kohonen Map and the training vector
phipsi_RMSDA<-lapply(random_list, RMSDA, data_phipsi=data_phipsi[k_row,])
}
如何解决这个错误的错误?
谢谢。谢谢。
edit:对于lapply来说,这些是唯一有用的元素
对于随机列表,我们可以使用:
random_list <- list(
c(88, 148, 60, 83, -119, -59, -96, 169),
c(104, 101, 174, -48, 18, 10, -159, 158),
c(164, -80, 137, -170, -172, 52, -149, 96),
c(88, 18, -115, 48, -3, -158, -92, -154),
c(170, -107, -109, -14, -142, -77, -120, 76),
c(-121, 15, -46, -145, -128, 74, -166, 44),
c(46, -178, 67, -88, -125, -130, 88, -11),
c(131, 147, -32, 103, -16, 116, 78, -125),
c(75, -95, -137, 133, -97, -134, 126, -105),
c(115, 173, -82, -135, 134, 82, -143, -43),
c(111, 13, -54, -53, 103, 132, -13, -43),
c(-143, 89, -91, -137, -63, 14, -166, 83),
c(-98, 178, 14, -80, -122, -25, 19, 117),
c(-113, -97, 34, -178, -56, 18, -167, 84),
c(49, 82, 50, 168, -157, -154, 51, 78),
c(173, -4, 164, 125, 31, 115, -74, -92)
)
和一个例子 data_phipsi [1,]
data_phipsi <- read.table(header = TRUE, text = "
phi1 psi2 phy2 psi3 phy3 psi4 phy4 psi5
-24.5 81.9 -155.2 -81.4 127.7 -118 166 -82.1")
data_phipsi
# phi1 psi2 phy2 psi3 phy3 psi4 phy4 psi5
# 1 -24.5 81.9 -155.2 -81.4 127.7 -118 166 -82.1
答案 0 :(得分:0)
主要问题是后续命令(如果感兴趣,请在问题编辑中返回win_index
代码行),因为怀疑来自lapply
的结果。
发现问题的故障排除:
random_list
和data_phipsi[k_row,]
的值都是合理的,并不值得怀疑; lapply
的输出全部为NA
因此,深入研究功能RMSDA
时,发现difference
看起来一直很好,直到
distance=mean(sqrt(difference^2))
这时它变成了全{NA
。问题在于数据仍然以帧的形式出现,因此mean
失败了(只需尝试mean(mtcars)
即可看到)。 (还应注意,我相信sqrt(difference^2)
等同于abs(difference)
。)
用{p>代替RMSDA
的那一行
distance=mean(abs(unlist(difference)))
似乎已解决了该问题(关键部分是unlist
)。