9 isNull(VECTOR_ELT(dn, 0)) &&
10 isNull(VECTOR_ELT(dn, 1)) &&
11 isNull(getAttrib(dn, R_NamesSymbol));
17 const char *nrn, *ncn;
21 !((!isNull(rn = VECTOR_ELT(dn, 0)) &&
22 !isNull(cn = VECTOR_ELT(dn, 1)) &&
24 ((n = LENGTH(rn)) != LENGTH(cn) ||
26 ((!isNull(ndn = getAttrib(dn, R_NamesSymbol)) &&
27 *(nrn = CHAR(STRING_ELT(ndn, 0))) !=
'\0' &&
28 *(ncn = CHAR(STRING_ELT(ndn, 1))) !=
'\0' &&
29 strcmp(nrn, ncn) != 0)));
37void symDN(SEXP dest, SEXP src,
int J )
41 if (!isNull(s = VECTOR_ELT(src, J = 1)) ||
42 !isNull(s = VECTOR_ELT(src, J = 0))) {
43 SET_VECTOR_ELT(dest, 0, s);
44 SET_VECTOR_ELT(dest, 1, s);
49 if (!isNull(s = VECTOR_ELT(src, J))) {
50 SET_VECTOR_ELT(dest, 0, s);
51 SET_VECTOR_ELT(dest, 1, s);
54 PROTECT(s = getAttrib(src, R_NamesSymbol));
56 SEXP destnms = PROTECT(allocVector(STRSXP, 2));
57 if (*CHAR(s = STRING_ELT(s, J)) !=
'\0') {
58 SET_STRING_ELT(destnms, 0, s);
59 SET_STRING_ELT(destnms, 1, s);
61 setAttrib(dest, R_NamesSymbol, destnms);
68void revDN(SEXP dest, SEXP src) {
70 if (!isNull(s = VECTOR_ELT(src, 0)))
71 SET_VECTOR_ELT(dest, 1, s);
72 if (!isNull(s = VECTOR_ELT(src, 1)))
73 SET_VECTOR_ELT(dest, 0, s);
74 PROTECT(s = getAttrib(src, R_NamesSymbol));
76 SEXP srcnms = s, destnms = PROTECT(allocVector(STRSXP, 2));
77 if (*CHAR(s = STRING_ELT(srcnms, 0)) !=
'\0')
78 SET_STRING_ELT(destnms, 1, s);
79 if (*CHAR(s = STRING_ELT(srcnms, 1)) !=
'\0')
80 SET_STRING_ELT(destnms, 0, s);
81 setAttrib(dest, R_NamesSymbol, destnms);
92 SEXP newdn = PROTECT(allocVector(VECSXP, 2));
102 SEXP newdn = PROTECT(allocVector(VECSXP, 2));
114 SEXP newdn = PROTECT(allocVector(VECSXP, 2));
126 SEXP newdn = PROTECT(allocVector(VECSXP, 2));
134 SEXP newdn = PROTECT(allocVector(VECSXP, 2));
144 SEXP newdn = PROTECT(allocVector(VECSXP, 2));
158 int i, n = LENGTH(
valid);
159 for (i = 0; i < n; ++i)
160 if (strcmp(x, CHAR(STRING_ELT(
valid, i))) == 0)
169 R_xlen_t n = XLENGTH(x);
170 SEXP y = PROTECT(allocVector(VECSXP, n + 1)),
171 ny = PROTECT(allocVector(STRSXP, n + 1)),
172 nval = PROTECT(mkChar(nm));
174 SEXP nx = PROTECT(getAttrib(x, R_NamesSymbol));
176 for (i = 0; i < n; ++i) {
177 SET_VECTOR_ELT( y, i, VECTOR_ELT( x, i));
178 SET_STRING_ELT(ny, i, STRING_ELT(nx, i));
182 SET_VECTOR_ELT( y, n, val);
183 SET_STRING_ELT(ny, n, nval);
184 setAttrib(y, R_NamesSymbol, ny);
192 if (LENGTH(factors) > 0) {
193 SEXP
valid = PROTECT(getAttrib(factors, R_NamesSymbol));
196 val = VECTOR_ELT(factors, i);
209 if (LENGTH(factors) > 0) {
210 SEXP
valid = PROTECT(getAttrib(factors, R_NamesSymbol));
214 SET_VECTOR_ELT(factors, i, val);
227 if (TYPEOF(nm) != STRSXP || LENGTH(nm) < 1 ||
228 (nm = STRING_ELT(nm, 0)) == NA_STRING)
229 error(
_(
"invalid factor name"));
232 else if (asLogical(warn) != 0)
233 warning(
_(
"attempt to set factor on %s without '%s' slot"),
234 "Matrix",
"factors");
#define SET_SLOT(x, what, value)
#define GET_SLOT(x, what)
void revDN(SEXP dest, SEXP src)
SEXP get_symmetrized_DimNames(SEXP obj, int J)
static SEXP append_to_named_list(SEXP x, const char *nm, SEXP val)
int DimNames_is_symmetric(SEXP dn)
SEXP R_DimNames_is_symmetric(SEXP dn)
SEXP R_set_factor(SEXP obj, SEXP nm, SEXP val, SEXP warn)
int DimNames_is_trivial(SEXP dn)
void symDN(SEXP dest, SEXP src, int J)
SEXP get_reversed_DimNames(SEXP obj)
SEXP get_factor(SEXP obj, const char *nm)
void set_factor(SEXP obj, const char *nm, SEXP val)
void set_reversed_DimNames(SEXP obj, SEXP dn)
static int strmatch(const char *x, SEXP valid)
void set_symmetrized_DimNames(SEXP obj, SEXP dn, int J)
static const char * valid[]
int equal_character_vectors(SEXP s1, SEXP s2, int n)