I want to duplicate each line in 'df' 3 times. But I'm confused why 'z' is a 6 by 4 matrix. Could somebody let me know what the correct way is to duplicate each row of a data.frame? df=expand.grid(x1=c('a','b'),x2=c('u','v')) n=3 z=apply(df,1 ,function(x){ result=do.call(rbind,rep(list(x),n)) result } ) z