これ へのフォローアップの質問です。 _.xlsx
_ファイルをRに読み込む最も速い方法は何ですか?
library(xlsx)
を使用して、36個の_.xlsx
_ファイルからデータを読み取ります。できます。ただし、特に各ファイルのデータがそれほど大きくない場合(各ファイルのサイズ3 * 3652のマトリックス)を考慮すると、これには非常に時間がかかる(30分をはるかに超える)ことが問題です。この目的のために、そのような問題に対処する方が良いですか? _.xlsx
_をRに読み込む別の簡単な方法はありますか?または、36個のファイルを単一のcsvファイルにすばやく入れてから、Rに読み込むことはできますか?
さらに、readxl
がxlsxを書き込めないことに気づきました。読み取りではなく書き込みを処理する対応するものはありますか?
"この質問に投票した人への回答":
速度は時間であり、時間は事実ですが、[〜#〜]ではないため、この質問は、いわゆる「意見の回答とスパム」ではなく事実についてです[〜#〜] [〜 #〜]意見。
さらに更新:
おそらく、ある方法が他の方法よりもはるかに速く機能する理由をわかりやすい言葉で説明できるでしょう。私は確かにこれについて混乱しています。
これは小さなベンチマークテストです。結果: readxl::read_xlsx
は平均して約2倍の速度で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")
Excelファイルを書き込むために、readxl
にはwritexl
と呼ばれるものがあります。 Excelファイルを読み取るのに最適なパッケージについては、上記のベンチマークはかなり良いと思います。
xlsx
を使用してパッケージを作成する唯一の理由は、1つの.xlsx
ファイルに多数のExcelシートを書き込む場合です。