我该怎么做呢
d <- "3:10"
并神奇地把它变成了这个
[1] 3 4 5 6 7 8 9 10
之前我已经看过这件事,并且广泛搜索过,但无法回想起任何事情。
这是我尝试过的。
> eval(d)
# [1] "3:10"
> eval(noquote(d))
# [1] 3:10
> noquote(eval(d))
# [1] 3:10
> evalq(d)
# [1] "3:10"
> substitute(d)
# d
答案 0 :(得分:4)
我认为你正在寻找可怕的eval(parse(...))
构造。
尝试:
d <- "3:10"
eval(parse(text = d))
# [1] 3 4 5 6 7 8 9 10
一个有趣的方法可能是:
Reduce(":", as.numeric(strsplit(d, ":", TRUE)[[1]]))
# [1] 3 4 5 6 7 8 9 10
而且,whaddyaknow!我不会,但它比eval(parse(...))
更快(但你在评论中的方法更快)。
fun1 <- function() Reduce(":", as.numeric(strsplit(d, ":", TRUE)[[1]]))
fun2 <- function() eval(parse(text = d))
fun3 <- function() {
s <- as.numeric(strsplit(d, ":", fixed = TRUE)[[1]])
s[1]:s[2]
}
library(microbenchmark)
microbenchmark(fun1(), fun2(), fun3())
# Unit: microseconds
# expr min lq median uq max neval
# fun1() 24.375 26.0865 32.2865 55.8070 113.751 100
# fun2() 108.192 112.4680 121.4490 204.8375 453.720 100
# fun3() 8.553 10.6920 12.8300 20.9550 40.198 100