这个问题类似于其他语言中的浮点误差问题(例如这里),然而我没有找到一个令人满意的解决方案。
我正在研究一些共享某些特征的矩阵的项目。作为其中的一部分,我需要知道列表中有多少个矩阵是唯一的。
我正在研究一些共享某些特征的矩阵的项目。作为其中的一部分,我需要知道列表中有多少个矩阵是唯一的。
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循环进行操作可能会很简单,但很可能效率低下。
您知道哪些方法或者有什么想法来解决识别和删除与机器误差接近的重复矩阵的问题吗?
dput(mat)
。 - IRTFM