R extract data frame from list without prefixes in column names

Volder picture Volder · Mar 24, 2013 · Viewed 18.6k times · Source

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. Thanks!

Answer

Gavin Simpson picture Gavin Simpson · Mar 24, 2013

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.