আরসিপিআরমাডিলোর নমুনা () আর কে আপডেট করার পরে অস্পষ্ট


9

আমি সাধারণত একটি সংক্ষিপ্ত আরসিপি ফাংশন নিয়ে কাজ করি যা ইনপুট হিসাবে একটি ম্যাট্রিক্স গ্রহণ করে যেখানে প্রতিটি সারিতে কে সম্ভাব্যতা রয়েছে ১ টি। ফাংশনটি এলোমেলোভাবে প্রতিটি সারির জন্য প্রদত্ত সম্ভাবনার সাথে সামঞ্জস্য রেখে 1 এবং K এর মধ্যে একটি পূর্ণসংখ্যার নমুনা দেয়। এটি ফাংশন:

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadilloExtensions/sample.h>

using namespace Rcpp;

// [[Rcpp::export]]
IntegerVector sample_matrix(NumericMatrix x, IntegerVector choice_set) {
  int n = x.nrow();
  IntegerVector result(n);
  for ( int i = 0; i < n; ++i ) {
    result[i] = RcppArmadillo::sample(choice_set, 1, false, x(i, _))[0];
  }
  return result;
}

আমি সম্প্রতি আর এবং সমস্ত প্যাকেজ আপডেট করেছি। এখন আমি এই ফাংশনটি আর সংকলন করতে পারি না। কারণটি আমার কাছে পরিষ্কার নয়। চলমান

library(Rcpp)
library(RcppArmadillo)
Rcpp::sourceCpp("sample_matrix.cpp")

নিম্নলিখিত ত্রুটি ছুড়ে:

error: call of overloaded 'sample(Rcpp::IntegerVector&, int, bool, Rcpp::Matrix<14>::Row)' is ambiguous

এটি মূলত আমাকে বলে যে আমার কলটি RcppArmadillo::sample()অস্পষ্ট। কেউ আমাকে আলোকিত করতে পারে কেন এই ঘটনাটি?

উত্তর:


9

এখানে দুটি জিনিস ঘটছে, এবং আপনার সমস্যার দুটি অংশ এবং তাই উত্তর।

প্রথমটি "মেটা": এখন কেন ? আচ্ছা, sample()কোড / সেটআপে আমাদের একটি বাগ লেট ছিল যা খ্রিস্টান দয়া করে অতি সাম্প্রতিক আরসিপিআরমাডিলো মুক্তির জন্য নির্ধারণ করেছিলেন (এবং এটি সমস্ত এখানে নথিভুক্ত করা হয়েছে)। সংক্ষেপে, খুব সমস্যার সম্ভাবনা যুক্তির জন্য ইন্টারফেসটি আপনাকে এখানে সমস্যা দেয় কারণ এটি পুনরায় ব্যবহার / পুনরাবৃত্তি ব্যবহারের জন্য নিরাপদ ছিল না কারণ এটি পরিবর্তন করা হয়েছিল । এটা এখন.

দ্বিতীয়ত, ত্রুটি বার্তা। আপনি কোন সংকলক বা সংস্করণ ব্যবহার করেন তা আপনি বলেননি তবে আমার (বর্তমানে g++-9.3) ত্রুটির সাথে আসলে বেশ সহায়ক helpful এটি এখনও সি ++ তাই কিছু ব্যাখ্যামূলক নাচের প্রয়োজন তবে সংক্ষেপে এটি আপনাকে স্পষ্ট করে জানিয়েছে যে আপনাকে বলা হয়েছিল Rcpp::Matrix<14>::Rowএবং সেই ধরণের জন্য কোনও ইন্টারফেস সরবরাহ করা হয়নি। যা সঠিক. sample()কয়েকটি ইন্টারফেস সরবরাহ করে তবে কোনও Rowবস্তুর জন্য কিছুই নয় । তাই ফিক্স আবার, সহজ। সারিটি একটি করে তৈরি করে সংযোজকটিকে সহায়তার জন্য একটি লাইন যুক্ত করুন NumericVectorএবং সব ভাল।

স্থির কোড

#include <RcppArmadillo.h>
#include <RcppArmadilloExtensions/sample.h>

// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;

// [[Rcpp::export]]
IntegerVector sample_matrix(NumericMatrix x, IntegerVector choice_set) {
  int n = x.nrow();
  IntegerVector result(n);
  for ( int i = 0; i < n; ++i ) {
    Rcpp::NumericVector z(x(i, _));
    result[i] = RcppArmadillo::sample(choice_set, 1, false, z)[0];
  }
  return result;
}

উদাহরণ

R> Rcpp::sourceCpp("answer.cpp")        # no need for library(Rcpp)   
R> 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.