Попробуйте это:
toCls <- function(x, cls) do.call(paste("as", cls, sep = "."), list(x))
replace(DF,, Map(toCls, DF, cls))
Второй пример. Также попробуйте этот пример (который позволяет использовать NA
для любого столбца, класс которого не должен изменяться). Мы загружаем пакет zoo, так как он предоставляет версию as.Date
, которая имеет источник по умолчанию, и мы определяем наш собственный as.POSIXct2
, чтобы избежать необходимости указывать источник в противном случае.
library(zoo) # supplies alternate as.Date with a default origin
as.NA <- identity
as.POSIXct2 <- function(x) as.POSIXct(x, origin = "1970-01-01")
cls2 <- c("character", "Date", NA, "factor", "POSIXct2")
replace(DF,, Map(toCls, DF, cls2))
Обратите внимание, что только при преобразовании чисел в "Date"
или "POSIXct"
существуют соображения происхождения, а при преобразовании символьных строк, таких как "2000-01-01"
, не нужно указывать источник в любом случае, поэтому для таких ситуаций мы не будем нужно загрузить зоопарк и нам не нужна наша собственная версия as.POSIXct
.
РЕДАКТИРОВАТЬ: Добавлен еще один пример.