The R Project SVN R

Rev

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

Rev 60517 Rev 60540
Line 141... Line 141...
141
	if (isVector(vals))
141
	if (isVector(vals))
142
	    copyMatrix(ans, vals, byrow);
142
	    copyMatrix(ans, vals, byrow);
143
	else
143
	else
144
	    copyListMatrix(ans, vals, byrow);
144
	    copyListMatrix(ans, vals, byrow);
145
    } else if (isVector(vals)) { /* fill with NAs */
145
    } else if (isVector(vals)) { /* fill with NAs */
146
	int i, j;
-
 
147
	R_xlen_t NR = nr;
146
	R_xlen_t N = (R_xlen_t) nr * nc, i;
148
	switch(TYPEOF(vals)) {
147
	switch(TYPEOF(vals)) {
149
	case STRSXP:
148
	case STRSXP:
150
	    for (i = 0; i < nr; i++)
149
	    for (i = 0; i < N; i++)
151
		for (j = 0; j < nc; j++)
-
 
152
		    SET_STRING_ELT(ans, i + j * NR, NA_STRING);
150
		SET_STRING_ELT(ans, i, NA_STRING);
153
	    break;
151
	    break;
154
	case LGLSXP:
152
	case LGLSXP:
155
	    for (i = 0; i < nr; i++)
153
	    for (i = 0; i < N; i++)
156
		for (j = 0; j < nc; j++)
-
 
157
		    LOGICAL(ans)[i + j * NR] = NA_LOGICAL;
154
		LOGICAL(ans)[i] = NA_LOGICAL;
158
	    break;
155
	    break;
159
	case INTSXP:
156
	case INTSXP:
160
	    for (i = 0; i < nr; i++)
157
	    for (i = 0; i < N; i++)
161
		for (j = 0; j < nc; j++)
-
 
162
		    INTEGER(ans)[i + j * NR] = NA_INTEGER;
158
		INTEGER(ans)[i] = NA_INTEGER;
163
	    break;
159
	    break;
164
	case REALSXP:
160
	case REALSXP:
165
	    for (i = 0; i < nr; i++)
161
	    for (i = 0; i < N; i++)
166
		for (j = 0; j < nc; j++)
-
 
167
		    REAL(ans)[i + j * NR] = NA_REAL;
162
		REAL(ans)[i] = NA_REAL;
168
	    break;
163
	    break;
169
	case CPLXSXP:
164
	case CPLXSXP:
170
	    {
165
	    {
171
		Rcomplex na_cmplx;
166
		Rcomplex na_cmplx;
172
		na_cmplx.r = NA_REAL;
167
		na_cmplx.r = NA_REAL;
173
		na_cmplx.i = 0;
168
		na_cmplx.i = 0;
174
		for (i = 0; i < nr; i++)
169
		for (i = 0; i < N; i++)
175
		    for (j = 0; j < nc; j++)
-
 
176
			COMPLEX(ans)[i + j * NR] = na_cmplx;
170
		    COMPLEX(ans)[i] = na_cmplx;
177
	    }
171
	    }
178
	    break;
172
	    break;
179
	case RAWSXP:
173
	case RAWSXP:
180
	    for (i = 0; i < nr; i++)
-
 
181
		for (j = 0; j < nc; j++)
-
 
182
		    RAW(ans)[i + j * NR] = 0;
174
	    memset(RAW(ans), 0, N);
183
	    break;
175
	    break;
184
	default:
176
	default:
185
	    /* don't fill with anything */
177
	    /* don't fill with anything */
186
	    ;
178
	    ;
187
	}
179
	}