safely turn a data.table back into a data.frame
If you are willing to convert your script to data.table, you can use use :=
to assign by reference, this will automatically assign to the (ncol(youdata)+1)th
column, and you can pass a character vector of the names to the LHS of the function. It will assign by reference, so no copying!
DT <- data.table(a = 1, b = 2)
DT[,'test' := 3]
DT
a b test
1: 1 2 3
The as.data.frame
method for data.tables is presumably the safest function to use. (Try typing getAnywhere("as.data.frame.data.table")
to see exactly what it does.)
library(data.table)
DT <- data.table(a=1:4, b=letters[c(1,1,2,2)], key="a")
class(as.data.frame(DT)) ## OR: as(X, "data.frame")
# [1] "data.frame"
This is an example of how to convert from data.table to data frame
library(tidyverse)
library(data.table)
df <- data.frame(a = 1:5, b = 6:10, c = LETTERS[5:9])
class(df)
#[1] "data.frame"
df <- data.table(df)
class(df)
#[1] "data.table" "data.frame"
class(df) <- class(as.data.frame(df))
class(df)
#[1] "data.frame"