The R Project SVN R

Rev

Rev 32350 | Rev 32380 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 32350 Rev 32356
Line 644... Line 644...
644
		    if(!isNull(dnx))
644
		    if(!isNull(dnx))
645
			SET_STRING_ELT(dimnamesnames, 0, STRING_ELT(dnx, 0));
645
			SET_STRING_ELT(dimnamesnames, 0, STRING_ELT(dnx, 0));
646
		}
646
		}
647
	    }
647
	    }
648
 
648
 
649
#define YDIMS_ET_CETERA
649
#define YDIMS_ET_CETERA							\
650
	    if (ydims != R_NilValue) {						\
650
	    if (ydims != R_NilValue) {					\
651
		if (ldy == 2) {							\
651
		if (ldy == 2) {						\
652
		    SET_VECTOR_ELT(dimnames, 1, VECTOR_ELT(ydims, 1));		\
652
		    SET_VECTOR_ELT(dimnames, 1, VECTOR_ELT(ydims, 1));	\
653
		    dny = getAttrib(ydims, R_NamesSymbol);			\
653
		    dny = getAttrib(ydims, R_NamesSymbol);		\
654
		    if(!isNull(dny))						\
654
		    if(!isNull(dny))					\
655
			SET_STRING_ELT(dimnamesnames, 1, STRING_ELT(dny, 1));	\
655
			SET_STRING_ELT(dimnamesnames, 1, STRING_ELT(dny, 1)); \
656
		} else if (nry == 1) {						\
656
		} else if (nry == 1) {					\
657
		    SET_VECTOR_ELT(dimnames, 1, VECTOR_ELT(ydims, 0));		\
657
		    SET_VECTOR_ELT(dimnames, 1, VECTOR_ELT(ydims, 0));	\
658
		    dny = getAttrib(ydims, R_NamesSymbol);			\
658
		    dny = getAttrib(ydims, R_NamesSymbol);		\
659
		    if(!isNull(dny))						\
659
		    if(!isNull(dny))					\
660
			SET_STRING_ELT(dimnamesnames, 1, STRING_ELT(dny, 0));	\
660
			SET_STRING_ELT(dimnamesnames, 1, STRING_ELT(dny, 0)); \
661
		}								\
661
		}							\
662
	    }									\
662
	    }								\
663
										\
663
									\
664
	    /* We sometimes attach a dimnames attribute				\
664
	    /* We sometimes attach a dimnames attribute			\
665
	     * whose elements are all NULL ...					\
665
	     * whose elements are all NULL ...				\
666
	     * This is ugly but causes no real damage.				\
666
	     * This is ugly but causes no real damage.			\
667
	     * Now (2.1.0 ff), we don't anymore: */				\
667
	     * Now (2.1.0 ff), we don't anymore: */			\
668
	    if (VECTOR_ELT(dimnames,0) != R_NilValue ||				\
668
	    if (VECTOR_ELT(dimnames,0) != R_NilValue ||			\
669
		VECTOR_ELT(dimnames,1) != R_NilValue) {				\
669
		VECTOR_ELT(dimnames,1) != R_NilValue) {			\
670
		if (dnx != R_NilValue || dny != R_NilValue)			\
670
		if (dnx != R_NilValue || dny != R_NilValue)		\
671
		    setAttrib(dimnames, R_NamesSymbol, dimnamesnames);		\
671
		    setAttrib(dimnames, R_NamesSymbol, dimnamesnames);	\
672
		setAttrib(ans, R_DimNamesSymbol, dimnames);			\
672
		setAttrib(ans, R_DimNamesSymbol, dimnames);		\
673
	    }									\
673
	    }								\
674
	    UNPROTECT(2)
674
	    UNPROTECT(2)
675
 
675
 
676
	    YDIMS_ET_CETERA;
676
	    YDIMS_ET_CETERA;
677
	}
677
	}
678
    }
678
    }
Line 724... Line 724...
724
    UNPROTECT(3);
724
    UNPROTECT(3);
725
    return ans;
725
    return ans;
726
}
726
}
727
#undef YDIMS_ET_CETERA
727
#undef YDIMS_ET_CETERA
728
 
728
 
729
 
-
 
730
SEXP do_transpose(SEXP call, SEXP op, SEXP args, SEXP rho)
729
SEXP do_transpose(SEXP call, SEXP op, SEXP args, SEXP rho)
731
{
730
{
732
    SEXP a, r, dims, dimnames, dimnamesnames=R_NilValue,
731
    SEXP a, r, dims, dimnames, dimnamesnames=R_NilValue,
733
	ndimnamesnames, rnames, cnames;
732
	ndimnamesnames, rnames, cnames;
734
    int i, ldim, len = 0, ncol=0, nrow=0;
733
    int i, ldim, len = 0, ncol=0, nrow=0;