@@ -149,7 +149,9 @@ ModelArray.lm <- function(formula, data, phenotypes, scalar = NULL, element.subs
149149 ... ) {
150150 # Validation ----
151151 .validate_modelarray_input(data )
152+
152153 scalar <- .resolve_formula_scalar(formula , data , scalar )
154+
153155 element.subset <- .validate_element_subset(element.subset , data , scalar )
154156 phenotypes <- .align_phenotypes(data , phenotypes , scalar )
155157
@@ -300,9 +302,10 @@ ModelArray.lm <- function(formula, data, phenotypes, scalar = NULL, element.subs
300302 return (invisible (NULL ))
301303 }
302304
303- df_out <- do.call(rbind , fits_all )
304- df_out <- as.data.frame(df_out )
305- colnames(df_out ) <- column_names
305+ result_mat <- do.call(rbind , fits_all )
306+ col_list <- lapply(seq_len(ncol(result_mat )), function (j ) result_mat [, j ])
307+ names(col_list ) <- column_names
308+ df_out <- cheapr :: fast_df(.args = col_list )
306309
307310 df_out <- .correct_pvalues(df_out , list.terms , correct.p.value.terms , var.terms )
308311 df_out <- .correct_pvalues(df_out , " model" , correct.p.value.model , var.model )
@@ -474,7 +477,9 @@ ModelArray.gam <- function(formula, data, phenotypes, scalar = NULL, element.sub
474477 ... ) {
475478 # Validation ----
476479 .validate_modelarray_input(data )
480+
477481 scalar <- .resolve_formula_scalar(formula , data , scalar )
482+
478483 element.subset <- .validate_element_subset(element.subset , data , scalar )
479484 phenotypes <- .align_phenotypes(data , phenotypes , scalar )
480485
@@ -695,9 +700,10 @@ ModelArray.gam <- function(formula, data, phenotypes, scalar = NULL, element.sub
695700 return (invisible (NULL ))
696701 }
697702
698- df_out <- do.call(rbind , fits_all )
699- df_out <- as.data.frame(df_out )
700- colnames(df_out ) <- column_names
703+ result_mat <- do.call(rbind , fits_all )
704+ col_list <- lapply(seq_len(ncol(result_mat )), function (j ) result_mat [, j ])
705+ names(col_list ) <- column_names
706+ df_out <- cheapr :: fast_df(.args = col_list )
701707
702708 # P-value corrections ----
703709 df_out <- .correct_pvalues(df_out , list.smoothTerms , correct.p.value.smoothTerms , var.smoothTerms )
@@ -756,9 +762,13 @@ ModelArray.gam <- function(formula, data, phenotypes, scalar = NULL, element.sub
756762 ...
757763 )
758764
759- reduced.model.df_out <- do.call(rbind , reduced.model.fits )
760- reduced.model.df_out <- as.data.frame(reduced.model.df_out )
761- colnames(reduced.model.df_out ) <- reduced.model.column_names
765+ result_mat_reduced <- do.call(rbind , reduced.model.fits )
766+ col_list_reduced <- lapply(
767+ seq_len(ncol(result_mat_reduced )),
768+ function (j ) result_mat_reduced [, j ]
769+ )
770+ names(col_list_reduced ) <- reduced.model.column_names
771+ reduced.model.df_out <- cheapr :: fast_df(.args = col_list_reduced )
762772
763773 # # Compute delta adj R-sq and partial R-sq ----
764774 delta_col <- paste0(changed.rsq.term.shortFormat , " .delta.adj.rsq" )
@@ -1104,8 +1114,10 @@ ModelArray.wrap <- function(FUN, data, phenotypes, scalar, element.subset = NULL
11041114 return (invisible (NULL ))
11051115 }
11061116
1107- df_out <- do.call(rbind , fits_all )
1108- df_out <- as.data.frame(df_out )
1109- colnames(df_out ) <- column_names
1117+ # Better proposed change:
1118+ result_mat <- do.call(rbind , fits_all )
1119+ col_list <- lapply(seq_len(ncol(result_mat )), function (j ) result_mat [, j ])
1120+ names(col_list ) <- column_names
1121+ df_out <- cheapr :: fast_df(.args = col_list )
11101122 df_out
11111123}
0 commit comments