flodel flodel - 7 days ago 5
R Question

creating a data.frame where a column is a list

I was curious to know why the following works:

df <- data.frame(a=1:3)
> df$b <- list(1:1, 1:2, 1:3)
> df
a b
1 1 1
2 2 1, 2
3 3 1, 2, 3


but not:

> df <- data.frame(a=1:3, b=list(1:1, 1:2, 1:3))
Error in data.frame(1L, 1:2, 1:3, check.names = FALSE, stringsAsFactors = TRUE) :
arguments imply differing number of rows: 1, 2, 3


Also, is there a way to create
df
in a single call to
data.frame
? Thank you.

Answer

Slightly obscurely, from ?data.frame:

If a list or data frame or matrix is
passed to ‘data.frame’ it is as if each component or column had
been passed as a separate argument (except for matrices of class
‘"model.matrix"’ and those protected by ‘I’).

So

data.frame(a=1:3,b=I(list(1,1:2,1:3)))

seems to work.