我肯定很困惑为什么按行索引访问data.table比data.frame慢.任何建议如何我可以在循环中顺序访问每一行data.table更快?
m = matrix(1L, nrow=100000, ncol=100)
DF = as.data.frame(m)
DT = as.data.table(m)
identical(DF[100, ], DT[100, ])
[1] FALSE
> all(DF[100, ], DT[100, ])
[1] TRUE
> system.time(for (i in 1:1000) DT[i,])
user system elapsed
5.440 0.000 5.451
R> system.time(for (i in 1:1000) DF[i,])
user system elapsed
2.757 0.000 2.784
Run Code Online (Sandbox Code Playgroud) 我需要生成下三角矩阵索引(行和列对).当对称矩阵变大(超过50K行)时,当前实现是低效的(内存方式).有没有更好的办法?
rows <- 2e+01
id <- which(lower.tri(matrix(, rows, rows)) == TRUE, arr.ind=T)
head(id)
# row col
# [1,] 2 1
# [2,] 3 1
# [3,] 4 1
# [4,] 5 1
# [5,] 6 1
# [6,] 7 1
Run Code Online (Sandbox Code Playgroud)