r - 如何在R中重新生成直方图?
问题描述
PAC 对这篇文章的回答显示了如何将直方图数据从 R 导出到 CSV。
> x <- rnorm(1000)
> h <- hist(x)
> h
$breaks
[1] -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0
$counts
[1] 1 5 23 38 104 154 208 191 130 85 39 17 4 0 1
$density
[1] 0.002 0.010 0.046 0.076 0.208 0.308 0.416 0.382 0.260 0.170 0.078 0.034 0.008 0.000 0.002
$mids
[1] -3.25 -2.75 -2.25 -1.75 -1.25 -0.75 -0.25 0.25 0.75 1.25 1.75 2.25 2.75 3.25 3.75
$xname
[1] "x"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
> out <- data.frame(mid = h$mids, counts = h$counts)
> write.table(out, file = "export.csv", row.names = FALSE, sep = ",")
假设我使用上述方法将直方图的breaks
, counts
, density
,值存储在 CSV 文件中。mids
现在,如何在 RStudio 中加载 CSV 文件并从 CSV 文件值重新生成直方图。请告诉我。提前致谢。
解决方案
好吧,如果您真的想将直方图编写为 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)
推荐阅读
- kotlin - Bean属性不可写。kotlin中的无效setter方法
- wordpress - 如何解决“JWT 配置不正确”的问题?
- css - 无法在本机反应中显示获取数据
- huggingface-transformers - Huggingface 的 `beam_search()` 和 `group_beam_search()` 有什么区别
- python - python高阶函数:我如何逐步阅读代码?
- gitlab - GitLab 服务的启动顺序是什么?
- angular - CDK 拖放延迟
- python - 我收到错误“张量()缺少 1 个必需的位置参数:'数据'”
- postgresql - 在更多条件下拆分字符串
- sql - 从包含特定 COLLID 且不包含另一个特定 COLLID 的 PACKLIST 中选择 PLANNAME?