Что ж, если вы действительно хотите написать гистограмму в виде csv и иметь возможность полностью восстановить ее из этого csv, вы можете. Вероятно, я бы сам использовал один из других методов, но было бы полезно посмотреть, как это можно сделать:
Мы начнем с определения функции, которая сохраняет гистограмму в CSV, прежде всего сделав ее в кадре данных. Мы должны добавить все элементы данных гистограммы, чтобы они были одинаковой длины, но мы легко изменим это, когда перезагрузим csv:
# Save a histogram object to csv
hist2csv <- function(h, csv_path)
{
df <- data.frame(breaks = h$breaks, counts = c(h$counts, 1),
density = c(h$density, 1), mids = c(h$mids, 1),
xname = rep(h$xname, length(h$breaks)),
equidist = rep(T, length(h$breaks)))
write.csv(df, csv_path)
}
Функция загрузки просто переворачивает этот процесс и гарантирует, что Результирующий список классифицируется как гистограмма:
# Load a histogram object from csv
csv2hist <- function(csv_path)
{
df <- read.csv(csv_path)
h <- as.list(df)
h$counts <- h$counts[-length(h$breaks)]
h$density <- h$density[-length(h$breaks)]
h$mids <- h$mids[-length(h$breaks)]
h$xname <- h$xname[1]
h$equidist <- h$equidist[1]
class(h) <- "histogram"
return(h)
}
Так что теперь вы можете сделать
x <- rnorm(1000)
h <- hist(x)
# Save csv
hist2csv(h, "hist.csv")
# Load csv as histogram
new_h <- csv2hist("hist.csv")
# Plot as normal
plot(new_h)