void RddtClust::doHeatmap(){ using namespace Rcpp; XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd(); RInside r = m_mwd->getRinstance(); int dims = this->m_selected.size(); if(dims==0) return; //m_colSelected.clear(); NumericVector nvSelected(dims); for(int i = 0; i<dims; i++){ nvSelected[i] = m_selected[i]; //this->m_colSelected.push_back(false); } r["selected"] = nvSelected; // for heatmap view; this applies to any similarity metrics std::string clustOrdcmd = "selected<-as.integer(selected)+1;\n" //R index starts from 1; "seldist <- distances[selected,selected];\n" //"sdist<-apply(seldist,1,sort);\n" "seldist"; SEXP evals = r.parseEval(clustOrdcmd); //NumericVector rClustOrd(evals); //evals = r.parseEval(paramValCmd); NumericMatrix rParamVal(evals); m_paraMtx.clear(); for(int i = 0; i<dims; i++){ for(int j = 0; j<dims; j++){ double v = rParamVal(i,j); this->m_paraMtx.push_back(v); } } std::string ordcmd = "ordidx <- apply(seldist,1,order);\n" "ordidx-1"; evals = r.parseEval(ordcmd); NumericMatrix rOrd(evals); this->m_paraOrdMtx.clear(); for(int i = 0; i<dims; i++){ for(int j = 0; j<dims; j++){ int v = rOrd(i,j); this->m_paraOrdMtx.push_back(v); } } /*this->m_dimOrd.clear(); for(int i=0; i<dims; i++){ int ord = (int)(rClustOrd[i]); m_dimOrd.push_back(ord); }*/ }
void td_r_invoke1(td_val_t *out, char *fname, td_val_t *arg) { SEXP ans; string arg_name = r_env.parseEval("paste(sample(letters, 10, replace=TRUE), collapse='')"); r_env[arg_name] = from_td_val(arg); r_env.parseEval( (string(fname) + "(" + arg_name + ")").c_str(), ans); r_env.parseEvalQ(string("rm(") + arg_name + ")"); R_PreserveObject(ans); to_td_val(out, ans); }
void td_r_invokeGraph2(graph_t *out, char *fname, graph_t *arg, int k) { char str[255]; derived_graph_and_annotation_t ret; SEXP ans; r_env["m"] = graph_to_dgRMatrix(*arg); r_env["k"] = k; sprintf(str, "%s(m, k)", fname); r_env.parseEval(str, ans); r_env.parseEvalQ("rm(\"m\", \"k\")"); List l(ans); ret.graph = SEXP_to_graph2(l["graph"], *out); ret.cluster_assignments = copy_to_c_type<IntegerVector>(l["clusters"]); }
void td_r_eval(td_val_t *out, char *str) { SEXP ans; r_env.parseEval(str, ans); // WS: I decree by general hack, for now this will be void //to_td_val(out, ans); }
// Propose, evaluate and accept based on temperature // Returns 1 if accepted, 0 if rejected int MLST::update(double temperature) { int accepted = 0; // Proposal int replace_idx = mlst_index(generator); int replaced_gene = _mlst[replace_idx]; int new_gene = rand_gene(generator); while (new_gene == replaced_gene) { new_gene = rand_gene(generator); } _mlst[replace_idx] = new_gene; std::sort(_mlst.begin(), _mlst.end()); // Calculate distance string mlst_genes double new_dist = _R.parseEval("tree_metric()"); // Decide whether to accept if (new_dist < _distance) { _distance = new_dist; accepted = 1; } return accepted; }
void RddtClust::getDimData(DoubleVector& dimData, int idx){ using namespace Rcpp; XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd(); RInside r = m_mwd->getRinstance(); //qDebug()<<"idx qt "<<idx; r["currentDim"] = idx; std::string cmd = "currentDim <- as.integer(currentDim)+1;\n" //"print(currentDim);\n" "dimData <- M[,currentDim];\n" "dimData"; SEXP evals = r.parseEval(cmd); NumericVector rDimData(evals); dimData.clear(); for(int i = 0; i< rDimData.length(); i++){ dimData.push_back(rDimData[i]); } }
void RddtClust::doOutliers(){ using namespace Rcpp; XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd(); RInside r = m_mwd->getRinstance(); int dims = this->m_selected.size(); if(dims<2) return; //int numSelected = this->m_selected.size(); NumericVector nvSelected(dims); for(int i = 0; i<dims; i++){ nvSelected[i] = m_selected[i]; } r["selected"] = nvSelected; std::string rankcmd = "vars<-apply(M[,selected],2,sd);\n" "vars<-as.matrix(vars);\n" "rownames(vars)<-1:nrow(vars);\n" "vars<-as.matrix(vars[order(vars[,1],decreasing=TRUE),]);\n" "as.numeric(rownames(vars))-1"; //order in r starts from 0; SEXP evals = r.parseEval(rankcmd); NumericVector rDimRank(evals); //ranking scores; std::string scorecmd="as.numeric(vars[,1])"; evals = r.parseEval(scorecmd); NumericVector rScoreMtx(evals); //save dimension statistics: rank order, rank score and heatmap order; this->m_order.clear(); // this->m_scores.clear(); for(int i=0; i<dims; i++){ int tmp = ((int)(rDimRank[i])); //this->m_dimRank; m_order.push_back(tmp); // double score = rScoreMtx[i]; //m_scores.push_back(score); } }
void RddtClust::doCenter(){ using namespace Rcpp; XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd(); RInside r = m_mwd->getRinstance(); int dims = this->m_selected.size(); int numSelected = this->m_selected.size(); //no need for single element reordering; if(numSelected<2) return; NumericVector nvSelected(numSelected); for(int i = 0; i<numSelected; i++){ nvSelected[i] = m_selected[i]; } r["selected"] = nvSelected; //cmd = ; //r.parseEval(cmd); if(m_selected.size()<=1){ assert(m_selected.size()>1); } std::string rcmd = "selected<-as.integer(selected)+1;\n" //R index starts from 1; "seldist <- distances[selected,selected];\n" //"print(distances);\n" "centroid <- colSums(seldist);\n" "ord<-as.vector(order(centroid));\n" "ord-1"; SEXP evals = r.parseEval(rcmd); NumericVector rCntrdOrder(evals); this->m_order.clear(); //this->m_scores.clear(); for(int i=0; i<dims; i++){ int tmp = ((int)(rCntrdOrder[i])); m_order.push_back(tmp); } rcmd = "max(as.dist(seldist));\n"; evals = r.parseEval(rcmd); m_worstFit = Rcpp::as<double>(evals); rcmd = "min(as.dist(seldist));\n"; evals = r.parseEval(rcmd); m_bestFit = Rcpp::as<double>(evals); rcmd = "mean(as.dist(seldist));\n"; evals = r.parseEval(rcmd); m_fitConsistency = Rcpp::as<double>(evals); rcmd = //"print(seldist);\n" "max(seldist[,ord[1]]);\n"; evals = r.parseEval(rcmd); m_fitRadius = Rcpp::as<double>(evals); }
void td_r_invoke0(td_val_t *out, char *fname) { SEXP ans; r_env.parseEval((string(fname) + "()").c_str(), ans); to_td_val(out, ans); }
BpdeMainWindow::BpdeMainWindow(RInside& R, const QString& sourceFile, QObject *parent) : R(R), sourceFile(sourceFile), x(), y(), H(), solver(NULL) { tempfile = QString::fromStdString(Rcpp::as<std::string>(R.parseEval("tfile <- tempfile()"))); svgfile = QString::fromStdString(Rcpp::as<std::string>(R.parseEval("sfile <- tempfile()"))); QWidget *window = new QWidget; window->setWindowTitle("BpdeGUI"); setCentralWidget(window); QGroupBox *runParameters = new QGroupBox("Параметры запуска"); openMPEnabled = new QRadioButton("&OpenMP"); openClEnabled = new QRadioButton("&OpenCL"); openMPEnabled->setChecked(true); connect(openMPEnabled, SIGNAL(clicked()), this, SLOT(loadSource())); connect(openClEnabled, SIGNAL(clicked()), this, SLOT(loadSource())); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(openMPEnabled); vbox->addWidget(openClEnabled); QLabel *threadsLabel = new QLabel("Количество потоков"); threadsLineEdit = new QLineEdit("4"); QHBoxLayout *threadNumber = new QHBoxLayout; threadNumber->addWidget(threadsLabel); threadNumber->addWidget(threadsLineEdit); QHBoxLayout *deviceLayout = new QHBoxLayout; QLabel *deviceLabel = new QLabel("Устройство"); deviceComboBox = new QComboBox(); scanDevices(); for (std::vector<cl::Device>::iterator it = devices.begin(); it != devices.end(); it++) deviceComboBox->addItem((*it).getInfo<CL_DEVICE_NAME>().c_str()); connect(deviceComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(loadSource())); deviceLayout->addWidget(deviceLabel); deviceLayout->addWidget(deviceComboBox); QHBoxLayout* runLayout = new QHBoxLayout; runButton = new QPushButton("Начать вычисления", this); qDebug() << "Connect : " << connect(runButton, SIGNAL(clicked()), this, SLOT(solve())); runLayout->addWidget(runButton); QVBoxLayout* ulLayout = new QVBoxLayout; ulLayout->addLayout(vbox); ulLayout->addLayout(threadNumber); ulLayout->addLayout(deviceLayout); ulLayout->addLayout(runLayout); runParameters->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); runParameters->setLayout(ulLayout); QButtonGroup *kernelGroup = new QButtonGroup; kernelGroup->addButton(openMPEnabled, 0); kernelGroup->addButton(openClEnabled, 1); QGroupBox *solveParamBox = new QGroupBox("Настройки вычислительного метода"); QHBoxLayout *iterationsLayout = new QHBoxLayout; QHBoxLayout *stepLayout = new QHBoxLayout; QLabel *sourceFileLabel = new QLabel("SourceFile"); sourceFileEdit = new QLineEdit(sourceFile); iterationsEdit = new QLineEdit("10000"); stepEdit = new QLineEdit("3600"); QLabel *iterationsLabel = new QLabel("Итерации"); QLabel *stepLabel = new QLabel("Шаг "); QHBoxLayout *exportLayout = new QHBoxLayout; exportImage = new QPushButton("Экспорт изотерм"); export3D = new QPushButton("Экспорт 3D модели"); connect(exportImage, SIGNAL(clicked()), this, SLOT(exportIsoterms())); connect(export3D, SIGNAL(clicked()), this, SLOT(export3DModel())); iterationsLayout->addWidget(iterationsLabel); iterationsLayout->addWidget(iterationsEdit); stepLayout->addWidget(stepLabel); stepLayout->addWidget(stepEdit); exportLayout->addWidget(exportImage); exportLayout->addWidget(export3D); svg = new QSvgWidget(); loadSource(); QVBoxLayout *solveParamLayout = new QVBoxLayout; solveParamLayout->addWidget(sourceFileLabel); solveParamLayout->addWidget(sourceFileEdit); solveParamLayout->addLayout(iterationsLayout); solveParamLayout->addLayout(stepLayout); solveParamLayout->addLayout(exportLayout); solveParamBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); solveParamBox->setLayout(solveParamLayout); QHBoxLayout *upperlayout = new QHBoxLayout; upperlayout->addWidget(runParameters); upperlayout->addWidget(solveParamBox); QHBoxLayout *lowerlayout = new QHBoxLayout; lowerlayout->addWidget(svg); QVBoxLayout *outer = new QVBoxLayout; outer->addLayout(upperlayout); outer->addLayout(lowerlayout); window->setLayout(outer); }