如何解决以相同的顺序将所有逻辑规则与向量匹配 基准
- 逻辑规则向量
pat
- 数据向量
dat
。
该函数检查所有规则是否已按正确顺序执行
dat <- 1:100
pat <- c( "dat<4 & dat>2","dat>6","dat>99" )
yes.seq.rule <- function(pat,dat){
lv <- rep(F,length(pat))
k <- 1
for(i in 1:length(dat)){
res <- eval(parse(text = pat[k]))[i]
if(res)
{
lv[k] <- TRUE
k <- k+1
}
if(k==length(pat)+1) break
}
return( all(lv) )
}
函数返回真/假
here 用完全相同的函数问了完全相同的问题,唯一的区别是在这个问题中向量 pat
是逻辑规则
问题: 有没有可能让这个功能更快
解决方法
这是一个只会循环表达式而不是数据的选项
f1 <- function(pat,dat) {
tmp_lst <- lapply(pat,function(x) {
i1 <- eval(parse(text = x))
if(any(i1)) min(which(i1))
})
if(!any(sapply(tmp_lst,is.null))) {
tmp <- unlist(tmp_lst)
identical(tmp,sort(tmp))
} else FALSE
}
f1(pat,dat)
#[1] TRUE
循环 pat
中的 lapply
terns,eval
uate,获得 min
imum 索引,检查只有 FALSE
种情况,即如果有任何模式返回全为 FALSE,则结果为 FALSE,
否则 unlist
并使用 identical
ed index
sort
基准
pat <- c( "dat<4 & dat>2","dat>6","dat>199","dat>1e7" )
dat <- 1:1000000
system.time(f1(pat,dat))
# user system elapsed
# 0.036 0.005 0.042
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。