我有一个尺寸为9000000x10的字符串矩阵(my_data),每个值都是一个字符串。我想使用函数utf8ToInt
将其转换为数字矩阵,但这需要很长时间并使我的会话崩溃。
new_matrix <- apply(my_data, 1:2, "utf8ToInt")
结果是我的期望,但我需要一种更有效的方法。
非常感谢任何帮助。
想象一下我的数据是:
my_data <- matrix(c("a","b","c","d"), ncol = 2)
但它实际上是9000000x10而不是2x2。
答案 0 :(得分:0)
使用 vapply
的速度几乎是原来的两倍。由于vapply
返回的是一个向量,所以需要重新建立矩阵格式(这里用structure
)。
library(microbenchmark)
my_data <- matrix(sample(letters, 2*100, replace = TRUE), ncol = 2)
microbenchmark(
apply = apply(my_data, 1:2, utf8ToInt),
vapply = structure(vapply(my_data, utf8ToInt, numeric(1)), dim=dim(my_data)),
times = 500L, check = 'equal'
)
#> Unit: microseconds
#> expr min lq mean median uq max neval
#> apply 199.201 208.001 224.811 213.801 220.1515 1560.400 500
#> vapply 111.000 115.501 136.343 120.401 124.9505 1525.901 500
由 reprex package (v1.0.0) 于 2021 年 3 月 6 日创建