11

I place a data frame inside the list. Then when try to extract it back - I get all column names prefixed with list key for this data frame, is there a way to extract data frame exactly as it was passed initially?

cols<-c("column1", "Column2", "Column3")
df1<-data.frame(matrix(ncol = 3, nrow = 1))
colnames(df1)<-cols
df1

result<-list()
result['df1']<-list(df1)

newdf1<-as.data.frame(result['df1'])
newdf1

Get as a result (column names are prefixed with df1):

> cols<-c("column1", "Column2", "Column3")
> df1<-data.frame(matrix(ncol = 3, nrow = 1))
> colnames(df1)<-cols
> df1
  column1 Column2 Column3
1      NA      NA      NA
> 
> result<-list()
> result['df1']<-list(df1)
> 
> newdf1<-as.data.frame(result['df1'])
> newdf1
  df1.column1 df1.Column2 df1.Column3
1          NA          NA          NA

Of course, I can remove the prefixes manually, but probably there is a proper way to do this.

starball
  • 20,030
  • 7
  • 43
  • 238
Volder
  • 972
  • 4
  • 13
  • 29

1 Answers1

24

Extract using [[ rather than [:

> newdf1 <- as.data.frame(result[['df1']])
> newdf1
  column1 Column2 Column3
1      NA      NA      NA

The difference is that [ extracts a list containing the requested component(s). [[ extracts the requested component directly (i.e. it retrieves the contents of that component of the list, not a list containing that component).

But as df1 already is a data frame, why not just do:

newdf1 <- result[['df1']]

? You don't need the as.data.frame() part.

Gavin Simpson
  • 170,508
  • 25
  • 396
  • 453