Я обошёл проблему благодаря идее, выдвинутой Маркусом
Сначала я сохраняю типы данных в векторе
dat_type <- sapply(DF, class)
Затем я переставляю фрейм данных
xx <- as.data.frame(t(xx), stringsAsFactors = F)
Я изменяю его в «блестящий» с помощью rhandsontable, а затем переставляю его обратно перед сохранением
xx <- as.data.frame(t(xx))
Я использую функцию, вдохновленную этим вопросом ( Назначение типов данных каждому столбцу фрейма данных в R), чтобы установить правильный тип данных для каждого столбца
data.type.assign <- function(xx, dat_type){
for(col_ind in 1:ncol(xx)){
switch (dat_type[col_ind],
"numeric" = {xx[,col_ind] <- as.numeric(xx[,col_ind])},
"character" = {xx[,col_ind] <- as.character(xx[,col_ind])},
"logical" = {xx[,col_ind] <- as.logical(xx[,col_ind])},
"integer" = {xx[,col_ind] <- as.integer(xx[,col_ind])}
)
}
xx
}
Он называется так
xx <- data.type.assign(xx, dat_type)
И это все.Теперь я сохраняю его как CSV-файл.Возможно, есть более быстрые способы сделать это, но этот делает работу довольно прилично.