-1
我正在研究Rcpp中的一個簡單的匹配算法,該算法需要多個個體(I),多個學校(J),多個提交選項(nc),優先級排序個人(POS)的,空缺(EMP),而真正的選擇的數量..rcpp更新基本環境中的數據
#include <Rcpp.h>
using namespace Rcpp;
//[[Rcpp::export]]
NumericVector gs2(int I, int J, int nc, NumericVector pos, NumericVector emp, NumericMatrix choices) {
NumericVector admits(J);
NumericVector out(I);
std::fill(out.begin(),out.end(),J+1);
for (int i=0;i<I;i++){
NumericVector apply = choices(pos(i),_)-1;
for (int j=0;j<nc;j++){
if (emp(apply(j))>0)
{
out(pos(i)) = apply(j)+1;
admits(apply(j)) = admits(apply(j)) + 1;
emp(apply(j)) = emp(apply(j)) - 1;
break;
}
}
}
return out;
}
代碼工作很好..除了它看起來與我的數據搞亂..運行代碼後我的尺寸變量已被更改...我錯過了什麼嗎?謝謝
set.seed(123)
rank = (1:20)-1
stuchoice = matrix(sample(1:3,6*20,replace=T),byrow=T,ncol=6,nrow=20)
size = c(7,11,4)
gs2(20,3,6,rank,size,stuchoice)
size
謝謝!但是當我創建另一個變量像var1 = size ..它也改變了var1。這怎麼可能? – msdu
因爲通過設置'var = size',他們在技術上指向相同的東西。如果分別更改'size',例如'size =「foo」',那麼您實質上是重新聲明'size',而var'仍然指向內存中的原始對象。 – cdeterman
好的。謝謝.. – msdu