Rem*_*i.b 3 r vector type-conversion
我认为一个例子应该让事情变得清晰.
我有
a_1 = 6547
我想要一些将a_1变换为以下a_2的函数
a_2 = c(6,5,4,7)
Ani*_*ban 13
(a %% c(1e4, 1e3, 1e2, 1e1)) %/% c(1e3, 1e2, 1e1, 1e0)
Run Code Online (Sandbox Code Playgroud)
这比我的计算机快3-4倍.但是strsplit更优雅,并且随着更长的向量,差异会减小.
library(microbenchmark)
microbenchmark((a %% c(1e4, 1e3, 1e2, 1e1)) %/% c(1e3, 1e2, 1e1, 1e0))
# median of 1.56 seconds
microbenchmark(as.numeric(strsplit(as.character(a), "")[[1]]))
# median of 8.88 seconds
Run Code Online (Sandbox Code Playgroud)
编辑:使用Carl的见解,这是一个更通用的版本.
a <- 6547
dig <- ceiling(log10(a))
vec1 <- 10^(dig:1)
vec2 <- vec1/10
(a%%vec1)%/%vec2
Run Code Online (Sandbox Code Playgroud)
Chi*_*til 12
转换为字符然后拆分将成功
a <- 6547
as.numeric(strsplit(as.character(a), "")[[1]])
## [1] 6 5 4 7
Run Code Online (Sandbox Code Playgroud)