コード例 #1
0
ファイル: logic.cpp プロジェクト: llbit/rho
	void checkOperandsConformable_full(const VectorBase* vl, const VectorBase* vr)
	{
	    // Temporary kludge:
	    VectorBase* vlnc = const_cast<VectorBase*>(vl);
	    VectorBase* vrnc = const_cast<VectorBase*>(vr);
	    if (Rf_isArray(vlnc) && Rf_isArray(vrnc)
		&& !Rf_conformable(vlnc, vrnc))
		Rf_error(_("non-conformable arrays"));
	    if (isTs(vlnc)) {
		if (isTs(vrnc) && !Rf_tsConform(vlnc, vrnc))
		    Rf_error(_("non-conformable time-series"));
		if (vr->size() > vl->size())
		    Rf_error(_("time-series/vector length mismatch"));
	    } else if (isTs(vrnc) && vl->size() > vr->size())
		Rf_error(_("time-series/vector length mismatch"));
	}
コード例 #2
0
ファイル: boom_r_tools.cpp プロジェクト: comenerv/Boom
 std::vector<int> GetArrayDimensions(SEXP array) {
   if (!Rf_isArray(array)) {
     report_error("GetArrayDimensions called on a non-array object.");
   }
   SEXP r_dims = PROTECT(Rf_getAttrib(array, R_DimSymbol));
   std::vector<int> dims(Rf_length(r_dims));
   int *rdims = INTEGER(r_dims);
   for (int i = 0; i < dims.size(); ++i) {
     dims[i] = rdims[i];
   }
   UNPROTECT(1);
   return dims;
 }