use list instead of data.frame