我可以以某种方式在循环中使用grep函数来搜索在向量中递增的索引变量吗?
for (i in 1:5){
print(grep("i",d))
}
其中d
d<-c(1,2,3,4,5)
在循环的第一次运行中,grep应该搜索1,在下面的2中......是否有某种方式?
答案 0 :(得分:2)
您可以尝试match
,它是矢量化的,因此您不需要循环。
x <- 1:5
set.seed(1)
d <- sample(1:10)
d
# 3 4 5 7 2 8 9 6 10 1
# find positions of (first) matches of x in d
match(x, d)
[1] 10 5 1 2 3
答案 1 :(得分:1)
for (i in 1:5) print(grep(i, d))
答案 2 :(得分:0)
这是一个奇怪的问题,但是你可以:
d<-c(1,2,3,4,5)
for (i in 1:5) { print(grep(get("i"),d)) }
如果你想在任意范围之间找到一些匹配,有更好的方法来做到这一点:
d = sample(1:20,5)
which(d %in% 1:5)
match(d,1:5)
any(d %in% 1:5, na.rm=T)
答案 3 :(得分:0)
与其他人一样,我不确定您的目标是什么,目标是什么,但使用Vectorize
创建grep
的“矢量化”版本呢?
这是一个可重复的小例子。我们将从一些示例数据开始...包含我们想要查找的内容的向量“d”,以及包含我们想要查看的内容的另一个向量“x”。
d <- c(1,2,3,4,5)
set.seed(1)
x <- paste0(letters[1:2], sample(5, 10, replace = TRUE))
x
# [1] "a2" "b2" "a3" "b5" "a2" "b5" "a5" "b4" "a4" "b1"
我们只需要将"pattern"
参数向量化为grep
:
vGrep <- Vectorize(grep, vectorize.args = "pattern", SIMPLIFY = FALSE)
我们现在可以像使用grep
一样使用这个新功能:
vGrep(d, x)
# [[1]]
# [1] 10
#
# [[2]]
# [1] 1 2 5
#
# [[3]]
# [1] 3
#
# [[4]]
# [1] 8 9
#
# [[5]]
# [1] 4 6 7
#
vGrep(d, x, value = TRUE)
# [[1]]
# [1] "b1"
#
# [[2]]
# [1] "a2" "b2" "a2"
#
# [[3]]
# [1] "a3"
#
# [[4]]
# [1] "b4" "a4"
#
# [[5]]
# [1] "b5" "b5" "a5"
#