【发布时间】:2021-06-03 11:53:30
【问题描述】:
例如,我有一个这样的矩阵
dat <- cbind(1:10,11:20,21:30)
colnames(dat) <- paste0("x",1:ncol(dat))
dat
x1 x2 x3
[1,] 1 11 21
[2,] 2 12 22
[3,] 3 13 23
[4,] 4 14 24
[5,] 5 15 25
[6,] 6 16 26
[7,] 7 17 27
[8,] 8 18 28
[9,] 9 19 29
[10,] 10 20 30
我也有一个带有逻辑规则的向量,比如这样
pat <- c("x1>1 & x2>12","x3>25","x1<x3 & x3>28")
pat
[1] "x1>1 & x2>12" "x3>25" "x1<x3 & x3>28"
我需要检查矩阵以执行规则,并且规则应该按照它们在向量中指定的顺序工作。 为了更好的理解,我会画
因此,我想得到一个函数,它接受两个参数,一个矩阵dat 和一个带有规则pat 的向量,并返回真/假。
如果有人愿意帮助我,我会很高兴
UPD========================================
我并不总是从函数f1 得到正确答案,可能是什么问题?
f1 <- function(pat, dat) {
tmp <- suppressWarnings(lapply(pat, function(x)
min(which( with(as.data.frame(dat),
eval(parse(text = x)))))))
tmp1 <- unlist(tmp)
i1 <- any(sapply(tmp, is.infinite))
if(i1) FALSE else identical(tmp1, sort(tmp1))
}
一些假数据
set.seed(25641)
dat <- matrix(data = sample(10,20,replace = T),ncol = 3)
colnames(dat) <- paste0("x",1:ncol(dat))
pat <- c("x1>5","x2>x1","x3>1")
> dat
x1 x2 x3
[1,] 4 4 7
[2,] 9 3 4
[3,] 7 9 5
[4,] 3 2 10
[5,] 10 7 10
[6,] 5 6 4
[7,] 9 9 4
根据数据可以看出,函数f1应该返回TRUE,但是返回的是FALSE
f1(pat = pat,dat = dat)
[1] FALSE
【问题讨论】: