@@ -34,18 +34,25 @@ namespace internal{
34
34
data_ (other.data_), dim_(other.dim_) {}
35
35
36
36
inline DimNameProxy& assign (SEXP other) {
37
- SEXP dims = Rf_getAttrib (data_, R_DimSymbol);
38
- if (INTEGER (dims)[dim_] != Rf_length (other)) {
39
- stop (" dimension extent is '%d' while length of names is '%d'" , INTEGER (dims)[dim_], Rf_length (other));
40
- }
41
- SEXP dimnames = Rf_getAttrib (data_, R_DimNamesSymbol);
42
- if (Rf_isNull (dimnames)) {
43
- Shield<SEXP> new_dimnames (Rf_allocVector (VECSXP, Rf_length (dims)));
44
- SET_VECTOR_ELT (new_dimnames, dim_, other);
45
- Rf_setAttrib (data_, R_DimNamesSymbol, new_dimnames);
46
- } else {
47
- SET_VECTOR_ELT (dimnames, dim_, other);
48
- }
37
+ if (Rf_length (other) == 0 )
38
+ {
39
+ Rf_setAttrib (data_, R_DimNamesSymbol, R_NilValue);
40
+ } else {
41
+ SEXP dims = Rf_getAttrib (data_, R_DimSymbol);
42
+
43
+ if (INTEGER (dims)[dim_] != Rf_length (other)) {
44
+ stop (" dimension extent is '%d' while length of names is '%d'" , INTEGER (dims)[dim_], Rf_length (other));
45
+ }
46
+
47
+ SEXP dimnames = Rf_getAttrib (data_, R_DimNamesSymbol);
48
+ if (Rf_isNull (dimnames)) {
49
+ Shield<SEXP> new_dimnames (Rf_allocVector (VECSXP, Rf_length (dims)));
50
+ SET_VECTOR_ELT (new_dimnames, dim_, other);
51
+ Rf_setAttrib (data_, R_DimNamesSymbol, new_dimnames);
52
+ } else {
53
+ SET_VECTOR_ELT (dimnames, dim_, other);
54
+ }
55
+ }
49
56
return *this ;
50
57
}
51
58
0 commit comments