I think I'm looking for an analog of rbind.fill
(in Hadley's plyr
package) for cbind
. I looked, but there is no cbind.fill
.
What I want to do is the following:
#set these just for this example
one_option <- TRUE
diff_option <- TRUE
return_df <- data.frame()
if (one_option) {
#do a bunch of calculations, produce a data.frame, for simplicity the following small_df
small_df <- data.frame(a=1, b=2)
return_df <- cbind(return_df,small_df)
}
if (diff_option) {
#do a bunch of calculations, produce a data.frame, for simplicity the following small2_df
small2_df <- data.frame(l="hi there", m=44)
return_df <- cbind(return_df,small2_df)
}
return_df
Understandably, this produces an error:
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 0, 1
My current fix is to replace the line return_df <- data.frame()
with return_df <- data.frame(dummy=1)
and then the code works. I then just remove dummy from the return_df
at the end. After adding the dummy and running the above code, I get
dummy a b l m
1 1 1 2 hi there 44
I then just need to get rid of the dummy, e.g.:
> return_df[,2:ncol(return_df)]
a b l m
1 1 2 hi there 44
I'm sure I'm missing an easier way to do this.
edit: I guess I'm not looking for a cbind.fill because that would mean that an NA value would be created after the cbind, which is not what I want.