这个问题类似于其他语言中关于浮点错误的问题(例如这里),但是我还没有找到令人满意的解决方案。
我正在开展一个项目,该项目涉及调查具有某些特征的矩阵。作为其中的一部分,我需要知道列表中有多少矩阵是唯一的。
D <- as.matrix(read.table("datasource",...))
mat_list <- vector('list',length=length(samples_list))
mat_list <- lapply(1:length(samples_list),function(i) matrix(data=0,nrow(D),ncol(D)))
然后,此列表由基于元素的数据的计算填充samples_list
。填充后mat_list
,我需要删除重复项。跑步
mat_list <- unique(mat_list)
缩小范围;但是,其中许多元素确实在彼此的机器误差范围内。该函数unique
不允许指定精度,我无法找到源代码进行修改。
我的一个想法是这样的:
ErrorReduction<-function(mat_list, tol=2){
len <- length(mat_list)
diff <- mat_list[[i]]-mat_list[[i+1]]
for(i in 1:len-1){
if(norm(diff,"i")<tol){
mat_list[[i+1]] <- mat_list[i]
}
}
mat_list<-unique(mat_list)
return(mat_list)
}
但这仅考虑成对差异。for
使用嵌套循环执行此操作很简单,但很可能效率低下。
你知道什么方法,或者你有什么想法来处理识别和删除在机器错误内重复的矩阵的问题?