在R中,使用列表中的向量命名列后,如何找到匹配的列名(grep和match-give-integer(0),NA)?

在R中,使用列表中的向量命名列后,如何找到匹配的列名(grep和match-give-integer(0),NA)?,r,match,R,Match,我可能遗漏了一些非常简单的东西。我有一个向量列表,然后用作列名。现在,我希望能够找到给定向量的列(索引)。我尝试过grep和match,由于某种原因,当我知道这是我从查看数据帧中看到的第一列时,我得到了NA和integer(0)。我做错了什么?代码如下: #Loops to create S S <- list() i <- 1 for(a in 0:12){ for(b in 0:(12-a)){ for(c in 0:(12-a-b)){ for(d i

我可能遗漏了一些非常简单的东西。我有一个向量列表,然后用作列名。现在,我希望能够找到给定向量的列(索引)。我尝试过grep和match,由于某种原因,当我知道这是我从查看数据帧中看到的第一列时,我得到了NA和integer(0)。我做错了什么?代码如下:

#Loops to create S
S <- list()
i <- 1

for(a in 0:12){
  for(b in 0:(12-a)){
    for(c in 0:(12-a-b)){
      for(d in 0:(12-a-b-c)){
        e <- 12 - a - b - c - d
        S[[i]] <- c(a, b, c, d, e)
        i <- i + 1    
      }
    }
  }
}

P <- matrix(data = NA, nrow = length(S), ncol = length(S))
for(i in 1:length(S)){
  for(j in 1:length(S)){
    
    #lots of stuff
    
  }
}

#Rename P matrix cols/rows
colnames(P) <- S
rownames(P) <- S

#Now I want to find which column has the name "c(0,0,0,0,12)" -- should be first one.  I tried:
grep("c(0, 0, 0, 0, 12)", colnames(P))
match('c(0, 0, 0, 0, 12)', names(P))
#循环以创建

S尝试匹配的唯一问题是使用了
名称(p)
,并且没有为矩阵定义
名称()。使用
colnames
rownames
将按预期工作:

match("c(0, 0, 0, 0, 12)", colnames(P))
# [1] 1

match("c(1, 5, 4, 0, 2)", colnames(P))
# [1] 758

您的
grep
尝试无效,因为
()
是正则表达式中的特殊字符。如果您将括号转义或设置为
fixed=TRUE
,则可以使用
grep
,但您不应该真正使用
grep
进行精确的字符串匹配-
match
%in%
是更好的工具。将
grep
保存起来,以便在需要通过正则表达式进行部分匹配或模式匹配时使用。

您的列名不应该比
c(0,0,0,0,12)
更有意义吗?它们代表某些事物,因此对我的上下文很有意义,但我不想完美地解释所有这些,非常感谢!谢谢你解释grep,我很感激!