NA'yı Rcpp'den döndür
Nov 14 2020
NA'yı Rcpp üzerinden iade etmeye çalışıyorum. get_na()Bu yazıda önerildiği gibi neden burada çalışmadığını anlamıyorum ?
> Rcpp::cppFunction('NumericVector temp1() {
return NumericVector::get_na();
}')
> temp1()
Error in temp1() : negative length vectors are not allowed
Eğer denersem create()işe yarıyor.
> Rcpp::cppFunction('NumericVector temp2() {
return NumericVector::create(NA_REAL);
}')
> temp2()
NA
Yanıtlar
4 BenjaminChristoffersen Nov 14 2020 at 16:40
Şunun gibi bir şey yapmanız gerekiyor:
Rcpp::cppFunction('NumericVector temp1() {
NumericVector y(1);
y[0] = NumericVector::get_na();
return y;
}')
temp1()
#R> [1] NA
kullanmak istiyorsanız NumericVector::get_na(). Bu üye işlevinin basitçe döndürdüğüne dikkat edin, buNA_REAL nedenle, NumericVector's constructor'ıyla ilgili hatayı önceden alırsınız :
Rcpp::cppFunction('NumericVector temp1() {
return NumericVector::get_na();
}')
Önerdiğiniz gibi eşit derecede iyi kullanabilirsiniz NumericVector::create. Ayrıca şunları da yapabilirsiniz:
Rcpp::cppFunction('NumericVector temp2() {
return NumericVector(1, NA_REAL);
}')
veya
Rcpp::cppFunction('double temp3() {
return NA_REAL;
}')
NA'yı Rcpp'den döndür
Diğer vektör türleriyle uğraşıyorsanız, NumericVectoro zaman get_naişlev çok yararlı olabilir. Burada NA döndürdüğümüz, ancak girdiye bağlı olarak farklı türlerde bir örnek var.
Rcpp::sourceCpp(code = '
#include "Rcpp.h"
using namespace Rcpp;
template<int T>
Vector<T> get_na_genric(){
return Vector<T>(1, Vector<T>::get_na());
}
// [[Rcpp::export]]
SEXP get_nan_vec(SEXP x) {
switch (TYPEOF(x)) {
case INTSXP : return get_na_genric<INTSXP >();
case LGLSXP : return get_na_genric<LGLSXP >();
case REALSXP: return get_na_genric<REALSXP>();
case STRSXP : return get_na_genric<STRSXP >();
case VECSXP : return get_na_genric<VECSXP >();
stop("type not implemented");
}
return get_na_genric<REALSXP>();
}')
for(x in list(integer(), logical(), numeric(), character(),
list())){
out <- get_nan_vec(x)
cat("got:\n")
print(out)
cat("with type ", typeof(out), "\n")
}
#R> got:
#R> [1] NA
#R> with type integer
#R> got:
#R> [1] NA
#R> with type logical
#R> got:
#R> [1] NA
#R> with type double
#R> got:
#R> [1] NA
#R> with type character
#R> got:
#R> [[1]]
#R> NULL
#R>
#R> with type list
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'