always force data frame as return value
apparently primitive functions don't have environments