R 将字符向量转换为函数调用
我怎么能吃这个R 将字符向量转换为函数调用,r,R,我怎么能吃这个 d <- "3: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 我认为您正在寻找可怕的eval(parse(…)构造 尝试: 还有,干什么!我不想这么做,但它比ev
d <- "3: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
我认为您正在寻找可怕的
eval(parse(…)
构造
尝试:
还有,干什么!我不想这么做,但它比eval(parse(…)
更快(但是您在注释中的方法更快)
fun1我认为您正在寻找可怕的eval(解析(…)
构造
尝试:
还有,干什么!我不想这么做,但它比eval(parse(…)
更快(但是您在注释中的方法更快)
fun1啊哈!好奇,为什么它是“可怕的”?很多人都这么说,尤其是关于eval
。与《财富》(106)
杂志的《财富》(106)s@RichardScriven同行是否更好?我会找出几个链接。不过我自己从来没有遇到过任何问题。@RichardScriven实际上提出了eval(parse(…)
构造最相关的原因。关于你的子问题,数据是如何以这种形式出现的?我正在解析来自的文本,为它所附带的数据创建标题向量。所以我想创建这些序列,以配合@DavidArenburg的结果,试试daha!好奇,为什么它是“可怕的”?很多人都这么说,尤其是关于eval
。与《财富》(106)
杂志的《财富》(106)s@RichardScriven同行是否更好?我会找出几个链接。不过我自己从来没有遇到过任何问题。@RichardScriven实际上提出了eval(parse(…)
构造最相关的原因。关于你的子问题,数据是如何以这种形式出现的?我正在解析来自的文本,为它所附带的数据创建标题向量。因此,我想创建这些序列,以与@davidernburg的结果一致,尝试d
> 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
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
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