この質問は、他の言語での浮動小数点エラーに関する質問 (たとえば、こちら) に似ていますが、満足のいく解決策は見つかりませんでした。
特定の特性を共有するマトリックスの調査を含むプロジェクトに取り組んでいます。その一環として、リスト内の一意の行列の数を知る必要があります。
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
では精度を指定することはできず、修正するソース コードを見つけることができませんでした。
私が持っていた1つのアイデアはこれでした:
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
ネストされたループでこれを行うのは簡単ですが、おそらく非効率的です。
重複しているというマシンエラーの範囲内にある行列を特定して削除するという問題を処理するために、どのような方法を知っていますか、またはどのようなアイデアを持っていますか?