SEXP saveAsText(SEXP s, SEXP New_file_name, SEXP IntPars, SEXP NANString ) { AbstractMatrix * p = getAbstractMatrixFromSEXP(s); if (p == NULL) { error_R("pointer is NULL\n"); return R_NilValue; } string newFilename = CHAR(STRING_ELT(New_file_name,0)); string nanString = CHAR(STRING_ELT(NANString,0)); bool showVarNames = LOGICAL(IntPars)[0]; bool showObsNames = LOGICAL(IntPars)[1]; bool transpose = LOGICAL(IntPars)[2]; AbstractMatrix *transposed = p; string tmpFileName,tmpFileName2; if (!transpose){ Transposer transposer; tmpFileName= p->getFileName() + string("_saveAsText_tmp"); tmpFileName2= p->getFileName() + string("_saveAsText_tmp2"); p->saveAs(tmpFileName); transposer.process(tmpFileName, tmpFileName2, true); transposed = new FileVector(tmpFileName2, p->getCacheSizeInMb()); } try { transposed->saveAsText(newFilename, showVarNames, showObsNames, nanString); } catch (int errcode) { error_R("can not save data to file %s\n",newFilename.c_str()); return R_NilValue; } if (!transpose){ delete transposed; unlink(tmpFileName.c_str()); unlink(tmpFileName2.c_str()); } SEXP ret; PROTECT(ret = allocVector(LGLSXP, 1)); LOGICAL(ret)[0] = TRUE; UNPROTECT(1); return ret; }