这是this one的后续问题。将$scope.treeOptions = {
beforeDrop : function (e) {
return confirm("Are you sure?");
}
};
个文件读入R的最快方法是什么?
我使用.xlsx
从36个library(xlsx)
文件中读取数据。有用。然而,问题在于这非常耗时(超过30分钟),尤其是在考虑每个文件中的数据不是那么大时(每个文件中的矩阵大小为3 * 3652)。为此,请问有更好的处理这样的问题吗?还有另一种快速方法可以将.xlsx
读入R吗?或者我可以快速将36个文件放入单个csv文件中,然后读入R?
此外,我刚才意识到.xlsx
无法编写xlsx。是否有对应的处理写作而不是阅读?
"对这些问题的回复#34;
这个问题是关于事实,而不是所谓的“见解答案和垃圾邮件”#34;因为速度是时间和事实,但 不 意见。
进一步更新:
也许有人可以用简单的语言向我们解释为什么某些方法的工作速度比其他方法快得多。我当然对此感到困惑。
答案 0 :(得分:11)
这是一个小型基准测试。结果:使用标准设置,不同行数(readxl::read_xlsx
)和列(openxlsx::read.xlsx
)的n
平均速度约为p
的两倍。
options(scipen=999) # no scientific number format
nn <- c(1, 10, 100, 1000, 5000, 10000, 20000, 30000)
pp <- c(1, 5, 10, 20, 30, 40, 50)
# create some excel files
l <- list() # save results
tmp_dir <- tempdir()
for (n in nn) {
for (p in pp) {
name <-
cat("\n\tn:", n, "p:", p)
flush.console()
m <- matrix(rnorm(n*p), n, p)
file <- paste0(tmp_dir, "/n", n, "_p", p, ".xlsx")
# write
write.xlsx(m, file)
# read
elapsed <- system.time( x <- openxlsx::read.xlsx(file) )["elapsed"]
df <- data.frame(fun = "openxlsx::read.xlsx", n = n, p = p,
elapsed = elapsed, stringsAsFactors = F, row.names = NULL)
l <- append(l, list(df))
elapsed <- system.time( x <- readxl::read_xlsx(file) )["elapsed"]
df <- data.frame(fun = "readxl::read_xlsx", n = n, p = p,
elapsed = elapsed, stringsAsFactors = F, row.names = NULL)
l <- append(l, list(df))
}
}
# results
d <- do.call(rbind, l)
library(ggplot2)
ggplot(d, aes(n, elapsed, color= fun)) +
geom_line() + geom_point() +
facet_wrap( ~ paste("columns:", p)) +
xlab("Number of rows") +
ylab("Seconds")
答案 1 :(得分:2)
要编写一个excel文件,readxl
有一个名为writexl
的副本。至于什么是读取excel文件的最佳软件包,我认为上面提供的基准相当不错。
我要使用xlsx
编写程序包的唯一原因是,如果我要在一个.xlsx
文件中编写许多excel表。