Rcpp işlevimde bir sorunum var. Temel olarak bir veri karesi (boyut N*K
) ve giriş olarak bir sayısal vektör (boyut H < N
) var ve çıktı olarak tamsayı vektörünün aynı satır dizinine sahip bir veri çerçevesini (boyut H * M
) döndürmek istiyorum.Rcpp'de bir data.frame 'i id' tarafından belirterek 'istek türü ile uyumlu değil'
VERİ ÇERÇEVE:
val1 val2 val3 val4
1 0.2059 A 14
2 0.5700 B 61
3 0.5354 C 24
4 0.8123 D 78
5 0.7542 E 39
6 0.6433 F 17
7 0.2452 G 96
8 0.2557 H 93
9 0.7208 I 36
10 0.2565 L 12
TAMSAYILI VEKTÖR:
2
4
7
10
ÇIKIŞ:
2 0.5700 B 61
4 0.8123 D 78
7 0.2452 G 96
10 0.2565 L 12
İşte benim kod. Yardım için şimdiden teşekkür ederiz:
#include <RcppArmadillo.h>
using namespace Rcpp;
// [[Rcpp::export]]
DataFrame matchRows(DataFrame &OriginalDF, NumericVector &ReducedVector)
{
int nr1 = OriginalDF.nrows(), nc1= OriginalDF.size();
int nr2 = ReducedVector.size();
if (nr1 < nr2) throw std::range_error("Size of data frame has to be higher than the target random subset!");
std::map<double, DataFrame> X;
for (int j = 0; j < nr2; j++)
{
NumericVector tmp1=wrap(OriginalDF[ReducedVector[j]]);
tmp1.attr("dim")=Dimension(int(tmp1.size())/nc1,nc1);
DataFrame NewDF(wrap(tmp1));
NewDF.push_back(OriginalDF[ReducedVector[j]]);
NewDF.attr("names")=OriginalDF.attr("names");
X[ReducedVector[j]] = NewDF;
}
return wrap(X);
}
Kodumun önceki sürümü ne yazık ki RStudio'nun çökmesine neden oldu. İdeal sıfıra veri çerçevesini başlatmak ve daha sonra push_back()
kullanarak değerleri eklemek için bir yolu vardır:
// [[Rcpp::export]]
DataFrame matchRows(DataFrame &OriginalDF, NumericVector &ReducedVector)
{
int nr1 = OriginalDF.nrows(), nc1 = OriginalDF.size();
int nr2 = ReducedVector.size();
if (nr1 < nr2) throw std::range_error("Size of data frame has to be higher than the target random subset!");
DataFrame NewDF;
for (int j = 0; j < nr2; j++)
{
NewDF.push_back(OriginalDF[ReducedVector[j]]);
}
return NewDF;
}
Tam hata iletisini sağlayın ve kodunuzun hangi satırının hatayı attığını belirtin. Daha sonra bazı hata ayıklama işlemleri yapın, yani tüm değişkenlerin (özellikle atadığınız veya dönüştürdüğünüz) sahip olmalarını beklediğiniz türde olup olmadığını kontrol edin. – Roland
Rcpp komut dosyası hatasız çalışır. Ancak, r işlevini çağırdığımda bana ileti hatası verir: 'istek türüyle uyumlu değil'. –
[http://stackoverflow.com/questions/24353078/rstudio-crashes-with-rcpp-with-reproducible-codes] örneğini izleyerek hata ayıklamayı denedim, ancak yine de RStudio'da aynı sorunu yaşıyorum. –