求一组向量set的前topN最小值以及对应的下标。
利用sourceCpp将下面的函数导入到R里面,多次运行sorttopNC函数,R会自动关闭。没有任何的error出现。[s:11]。大神求解额~ (注:maxC函数测试了,应该没有任何问题)
x=sample(1:100,20)
sorttopNC(x,5)
#************程序如下:
<br />
# include < Rcpp.h ><br />
using namespace Rcpp;</p>
<p>// [[Rcpp::export]]<br />
int maxC(NumericMatrix dset){<br />
int n=dset.nrow();<br />
int kindex=0;<br />
double maxv=dset(0,0);<br />
for(int i=1;i<n;i++){<br />
if(dset(i,0)>maxv){<br />
kindex=i;<br />
maxv=dset(i,0);<br />
}<br />
}<br />
return(kindex);<br />
}</p>
<p>// [[Rcpp::export]]<br />
NumericMatrix sorttopNC(NumericVector set, int topN)<br />
{<br />
int setlen=set.size();<br />
NumericMatrix result(topN,2);<br />
for( int i=0;i<topN;i++){<br />
result(i,0)=set[i];<br />
result(i,1)=i; }<br />
int maxkey=maxC(result);<br />
double maxvalue=result(maxkey,0);<br />
int k=topN;</p>
<p>while(k<setlen){<br />
if(set[k]<maxvalue){<br />
result(maxkey,0)=set[k];<br />
result(maxkey,1)=k;<br />
maxkey=maxC(result);<br />
maxvalue=result(maxkey,0);<br />
}<br />
k++;<br />
}<br />
for(int i=0;i<setlen;i++){<br />
result(i,1)+=1;<br />
}<br />
return(result);<br />
}<br />
</p>