3 列のソート済みリストがあり、2 番目の列が 2 または 4 に一致するかどうかを検索し、一致する場合は最初の列の要素を返し、それを関数に入れます。
noOutliers((L1LeanList[order(L1LeanList[,1]),])[(L1LeanList[order(L1LeanList[,1]),2]==2)|
(L1LeanList[order(L1LeanList[,1]),2]==4),1])
条件に一致するものがない場合。私は得る
Error in ((L1LeanList[order(L1LeanList[, 1]), ])[1, ])[(L1LeanList[order(L1LeanList[, :
incorrect number of dimensions
効果的に List[List[all false]] を持っているという事実のために
L1LLSorted<-(L1LeanList[order(L1LeanList[,1]),] のようなものをサブアウトして L1LLSorted[,2] を使用することはできません。これは、リストの長さがちょうど 1 の場合にエラーが返されるためです。
だから今、私のコードは次のようになる必要があります
noOutliers(ifelse(any((L1LeanList[order(L1LeanList[,1]),2]==2)|
(L1LeanList[order(L1LeanList[,1]),2]==4)),0,
(L1LeanList[order(L1LeanList[,1]),])[(L1LeanList[order(L1LeanList[,1]),2]==2)|
(L1LeanList[order(L1LeanList[,1]),2]==4),1])))
私が要求している単純なことには少しばかげているようです。これを書いているときに、このすべてのエラーチェックを noOutliers 関数自体に入れることができることに気付きました。これにより、 noOutliers(L1LeanList,2,2,4) のようになり、見た目がはるかに良くなります。私のコードを何十回も。実際の関数をもっと洗練された方法で書く方法があるのではないかと考えずにはいられません。
興味深いことに、noOutliers は、並べ替えられたデータ セットの 30 ~ 70 パーセンタイルの平均を次のように見つけます。
noOutliers<-function(oList)
{
if (length(oList)<=20) return ("insufficient data")
cumSum<-0
iterCount<-0
for(i in round(length(oList)*3/10-.000001):round(length(oList)*7/10+.000001)+1)#adjustments deal with .5->even number rounding r mishandling
{ #and 1-based indexing (ex. for a list 1-10, taking 3-7 cuts off 1,2,8,9,10, imbalanced.)
cumSum<-cumSum+oList[i]
iterCount<-iterCount+1
}
return(cumSum/iterCount)
}