@@ -89,13 +89,15 @@ protected RList split(RAbstractVector x, RAbstractIntVector f,
8989 // perform split
9090 while (xAccess .next (xIter )) {
9191 fAccess .nextWithWrap (fIter );
92- int resultIndex = fAccess .getInt (fIter ) - 1 ; // a factor is a 1-based int
93- // vector
94- String [] collect = collectResults [resultIndex ];
95- if (collect .length == collectResultSize [resultIndex ]) {
96- collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
92+ if (!fAccess .isNA (fIter )) {
93+ // a factor is a 1-based int vector
94+ int resultIndex = fAccess .getInt (fIter ) - 1 ;
95+ String [] collect = collectResults [resultIndex ];
96+ if (collect .length == collectResultSize [resultIndex ]) {
97+ collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
98+ }
99+ collect [collectResultSize [resultIndex ]++] = xAccess .getString (xIter );
97100 }
98- collect [collectResultSize [resultIndex ]++] = xAccess .getString (xIter );
99101 }
100102
101103 RStringVector [] resultNames = getSplitNames .getNames (x , fAccess , fIter , nLevels , collectResultSize );
@@ -112,15 +114,17 @@ protected RList split(RAbstractVector x, RAbstractIntVector f,
112114 // perform split
113115 while (xAccess .next (xIter )) {
114116 fAccess .nextWithWrap (fIter );
115- int resultIndex = fAccess .getInt (fIter ) - 1 ; // a factor is a 1-based int
116- // vector
117- double [] collect = collectResults [resultIndex ];
118- if (collect .length == collectResultSize [resultIndex ] * 2 ) {
119- collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
117+ if (!fAccess .isNA (fIter )) {
118+ // a factor is a 1-based int vector
119+ int resultIndex = fAccess .getInt (fIter ) - 1 ;
120+ double [] collect = collectResults [resultIndex ];
121+ if (collect .length == collectResultSize [resultIndex ] * 2 ) {
122+ collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
123+ }
124+ collect [collectResultSize [resultIndex ] * 2 ] = xAccess .getComplexR (xIter );
125+ collect [collectResultSize [resultIndex ] * 2 + 1 ] = xAccess .getComplexI (xIter );
126+ collectResultSize [resultIndex ]++;
120127 }
121- collect [collectResultSize [resultIndex ] * 2 ] = xAccess .getComplexR (xIter );
122- collect [collectResultSize [resultIndex ] * 2 + 1 ] = xAccess .getComplexI (xIter );
123- collectResultSize [resultIndex ]++;
124128 }
125129
126130 RStringVector [] resultNames = getSplitNames .getNames (x , fAccess , fIter , nLevels , collectResultSize );
@@ -137,13 +141,15 @@ protected RList split(RAbstractVector x, RAbstractIntVector f,
137141 // perform split
138142 while (xAccess .next (xIter )) {
139143 fAccess .nextWithWrap (fIter );
140- int resultIndex = fAccess .getInt (fIter ) - 1 ; // a factor is a 1-based int
141- // vector
142- double [] collect = collectResults [resultIndex ];
143- if (collect .length == collectResultSize [resultIndex ]) {
144- collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
144+ if (!fAccess .isNA (fIter )) {
145+ // a factor is a 1-based int vector
146+ int resultIndex = fAccess .getInt (fIter ) - 1 ;
147+ double [] collect = collectResults [resultIndex ];
148+ if (collect .length == collectResultSize [resultIndex ]) {
149+ collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
150+ }
151+ collect [collectResultSize [resultIndex ]++] = xAccess .getDouble (xIter );
145152 }
146- collect [collectResultSize [resultIndex ]++] = xAccess .getDouble (xIter );
147153 }
148154
149155 RStringVector [] resultNames = getSplitNames .getNames (x , fAccess , fIter , nLevels , collectResultSize );
@@ -160,13 +166,15 @@ protected RList split(RAbstractVector x, RAbstractIntVector f,
160166 // perform split
161167 while (xAccess .next (xIter )) {
162168 fAccess .nextWithWrap (fIter );
163- int resultIndex = fAccess .getInt (fIter ) - 1 ; // a factor is a 1-based int
164- // vector
165- int [] collect = collectResults [resultIndex ];
166- if (collect .length == collectResultSize [resultIndex ]) {
167- collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
169+ if (!fAccess .isNA (fIter )) {
170+ // a factor is a 1-based int vector
171+ int resultIndex = fAccess .getInt (fIter ) - 1 ;
172+ int [] collect = collectResults [resultIndex ];
173+ if (collect .length == collectResultSize [resultIndex ]) {
174+ collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
175+ }
176+ collect [collectResultSize [resultIndex ]++] = xAccess .getInt (xIter );
168177 }
169- collect [collectResultSize [resultIndex ]++] = xAccess .getInt (xIter );
170178 }
171179
172180 RStringVector [] resultNames = getSplitNames .getNames (x , fAccess , fIter , nLevels , collectResultSize );
@@ -183,13 +191,15 @@ protected RList split(RAbstractVector x, RAbstractIntVector f,
183191 // perform split
184192 while (xAccess .next (xIter )) {
185193 fAccess .nextWithWrap (fIter );
186- int resultIndex = fAccess .getInt (fIter ) - 1 ; // a factor is a 1-based int
187- // vector
188- Object [] collect = collectResults [resultIndex ];
189- if (collect .length == collectResultSize [resultIndex ]) {
190- collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
194+ if (!fAccess .isNA (fIter )) {
195+ // a factor is a 1-based int vector
196+ int resultIndex = fAccess .getInt (fIter ) - 1 ;
197+ Object [] collect = collectResults [resultIndex ];
198+ if (collect .length == collectResultSize [resultIndex ]) {
199+ collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
200+ }
201+ collect [collectResultSize [resultIndex ]++] = xAccess .getListElement (xIter );
191202 }
192- collect [collectResultSize [resultIndex ]++] = xAccess .getListElement (xIter );
193203 }
194204
195205 RStringVector [] resultNames = getSplitNames .getNames (x , fAccess , fIter , nLevels , collectResultSize );
@@ -206,13 +216,15 @@ protected RList split(RAbstractVector x, RAbstractIntVector f,
206216 // perform split
207217 while (xAccess .next (xIter )) {
208218 fAccess .nextWithWrap (fIter );
209- int resultIndex = fAccess .getInt (fIter ) - 1 ; // a factor is a 1-based int
210- // vector
211- byte [] collect = collectResults [resultIndex ];
212- if (collect .length == collectResultSize [resultIndex ]) {
213- collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
219+ if (!fAccess .isNA (fIter )) {
220+ // a factor is a 1-based int vector
221+ int resultIndex = fAccess .getInt (fIter ) - 1 ;
222+ byte [] collect = collectResults [resultIndex ];
223+ if (collect .length == collectResultSize [resultIndex ]) {
224+ collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
225+ }
226+ collect [collectResultSize [resultIndex ]++] = xAccess .getLogical (xIter );
214227 }
215- collect [collectResultSize [resultIndex ]++] = xAccess .getLogical (xIter );
216228 }
217229
218230 RStringVector [] resultNames = getSplitNames .getNames (x , fAccess , fIter , nLevels , collectResultSize );
@@ -229,13 +241,15 @@ protected RList split(RAbstractVector x, RAbstractIntVector f,
229241 // perform split
230242 while (xAccess .next (xIter )) {
231243 fAccess .nextWithWrap (fIter );
232- int resultIndex = fAccess .getInt (fIter ) - 1 ; // a factor is a 1-based int
233- // vector
234- byte [] collect = collectResults [resultIndex ];
235- if (collect .length == collectResultSize [resultIndex ]) {
236- collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
244+ if (!fAccess .isNA (fIter )) {
245+ // a factor is a 1-based int vector
246+ int resultIndex = fAccess .getInt (fIter ) - 1 ;
247+ byte [] collect = collectResults [resultIndex ];
248+ if (collect .length == collectResultSize [resultIndex ]) {
249+ collectResults [resultIndex ] = collect = Arrays .copyOf (collect , collect .length * SCALE_FACTOR );
250+ }
251+ collect [collectResultSize [resultIndex ]++] = xAccess .getRaw (xIter );
237252 }
238- collect [collectResultSize [resultIndex ]++] = xAccess .getRaw (xIter );
239253 }
240254
241255 RStringVector [] resultNames = getSplitNames .getNames (x , fAccess , fIter , nLevels , collectResultSize );
0 commit comments