2014-02-17 56 views
0

我想基于一些输入的子集向量。 file.list将是我想要子集的文件名的向量,物种将是我想要在文件中搜索的物种名称。基于逻辑值表R的子集向量R

file.list <- c("blah_cod", "blah_had", "blah_ggu", "blah_cod") 
species <- c("cod", "had") 
a<-sapply(species, grepl, file.list, ignore.case=TRUE) 

     cod had 
[1,] TRUE FALSE 
[2,] FALSE TRUE 
[3,] FALSE FALSE 
[4,] TRUE FALSE 

file.list[a[,1]] 
file.list[a[,2]] 

随着我的代码目前我能得到我所需要的,但我需要能够将其自动化,使得列数将取决于用户输入的物种数量。我试着循环是这样的:

for (i in (1:ncol(a))){b<-file.list[a[,i]]} 

我也尝试了一些沿着这些线路的组合,但无论是只得到我需要的信息或错误的一部分。有任何想法吗?

+1

你得到什么样的错误?你能把它们粘贴在这里吗? – Llopis

+0

你的结果应该如何? – Beasterfield

+0

那么我得到的通常的错误,如果我尝试其他方法循环显示是:要替换的项目数不是替换长度的倍数 – Tom

回答

0

grep可用于实际返回的比赛,而不是逻辑值:

lapply(species, grep, file.list, ignore.case=TRUE, value=TRUE) 
#[[1]] 
#[1] "blah_cod" "blah_cod" 
# 
#[[2]] 
#[1] "blah_had"