R 原子向量中的部分匹配

R 原子向量中的部分匹配,r,vector,matching,R,Vector,Matching,有没有办法在原子向量中实现部分匹配?我知道$operator对原子向量不起作用,但我认为可以使用[[“I”,exact=FALSE]] x <- c("a1", "a2", "a3", "b1", "b2") names(x) <- x x$a 将“对象”返回为“未找到” 有没有一种方法可以像这样对原子向量进行部分匹配 干杯, Zup我不知道有什么东西能完全满足你的要求。以下内容有点含糊不清,但可能适合您: x[grep("^a", names(x))] # a1 a2

有没有办法在原子向量中实现部分匹配?我知道$operator对原子向量不起作用,但我认为可以使用[[“I”,exact=FALSE]]

x <- c("a1", "a2", "a3", "b1", "b2")
names(x) <- x

x$a
将“对象”返回为“未找到”

有没有一种方法可以像这样对原子向量进行部分匹配

干杯,
Zup

我不知道有什么东西能完全满足你的要求。以下内容有点含糊不清,但可能适合您:

x[grep("^a", names(x))]
#   a1   a2   a3 
# "a1" "a2" "a3" 
此外,可以进行部分匹配,但仅当只有一个索引项与部分索引匹配时,它才起作用。例如:

y <- 1:5
names(y) <- paste(letters[1:5], 1:5)
y[["a", exact=F]]
# [1] 1
names(y)[[2]] <- "a 2"  # add a second index that starts with "a"
y[["a", exact=F]]
# Error in y[["a", exact = F]] : subscript out of bounds

y我不知道有什么东西能完全满足你的需要。以下内容有点含糊不清,但可能适合您:

x[grep("^a", names(x))]
#   a1   a2   a3 
# "a1" "a2" "a3" 
此外,可以进行部分匹配,但仅当只有一个索引项与部分索引匹配时,它才起作用。例如:

y <- 1:5
names(y) <- paste(letters[1:5], 1:5)
y[["a", exact=F]]
# [1] 1
names(y)[[2]] <- "a 2"  # add a second index that starts with "a"
y[["a", exact=F]]
# Error in y[["a", exact = F]] : subscript out of bounds

y我不知道有什么东西能完全满足你的需要。以下内容有点含糊不清,但可能适合您:

x[grep("^a", names(x))]
#   a1   a2   a3 
# "a1" "a2" "a3" 
此外,可以进行部分匹配,但仅当只有一个索引项与部分索引匹配时,它才起作用。例如:

y <- 1:5
names(y) <- paste(letters[1:5], 1:5)
y[["a", exact=F]]
# [1] 1
names(y)[[2]] <- "a 2"  # add a second index that starts with "a"
y[["a", exact=F]]
# Error in y[["a", exact = F]] : subscript out of bounds

y我不知道有什么东西能完全满足你的需要。以下内容有点含糊不清,但可能适合您:

x[grep("^a", names(x))]
#   a1   a2   a3 
# "a1" "a2" "a3" 
此外,可以进行部分匹配,但仅当只有一个索引项与部分索引匹配时,它才起作用。例如:

y <- 1:5
names(y) <- paste(letters[1:5], 1:5)
y[["a", exact=F]]
# [1] 1
names(y)[[2]] <- "a 2"  # add a second index that starts with "a"
y[["a", exact=F]]
# Error in y[["a", exact = F]] : subscript out of bounds

y基本上,通过重载操作符,您可以获得任何想要的行为。使用以下代码时,括号将被重载,以便按照您希望的方式进行操作:

# overload the brackets for reading out
"[.pmatch_vec" = function(obj,idx){
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    return(obj[idx])
  else
    return(obj[grep(paste("^",idx,sep=""),names(obj))])
}

# overload the assignment operator []<- 
"[<-.pmatch_vec" = function(obj,idx,value){
  saveclass <- class(obj)
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    obj[idx] <- value
  else
    obj[grep(paste("^",idx,sep=""),names(obj))] <- value
  class(obj) <- saveclass
  return(obj)
}
#重载括号以便读取
“[.pmatch_vec”=功能(obj、idx){

origclass基本上,通过重载运算符,您可以获得任何您想要的行为。使用以下代码,括号被重载,以实现您想要它们的行为方式:

# overload the brackets for reading out
"[.pmatch_vec" = function(obj,idx){
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    return(obj[idx])
  else
    return(obj[grep(paste("^",idx,sep=""),names(obj))])
}

# overload the assignment operator []<- 
"[<-.pmatch_vec" = function(obj,idx,value){
  saveclass <- class(obj)
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    obj[idx] <- value
  else
    obj[grep(paste("^",idx,sep=""),names(obj))] <- value
  class(obj) <- saveclass
  return(obj)
}
#重载括号以便读取
“[.pmatch_vec”=功能(obj、idx){

origclass基本上,通过重载运算符,您可以获得任何您想要的行为。使用以下代码,括号被重载,以实现您想要它们的行为方式:

# overload the brackets for reading out
"[.pmatch_vec" = function(obj,idx){
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    return(obj[idx])
  else
    return(obj[grep(paste("^",idx,sep=""),names(obj))])
}

# overload the assignment operator []<- 
"[<-.pmatch_vec" = function(obj,idx,value){
  saveclass <- class(obj)
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    obj[idx] <- value
  else
    obj[grep(paste("^",idx,sep=""),names(obj))] <- value
  class(obj) <- saveclass
  return(obj)
}
#重载括号以便读取
“[.pmatch_vec”=功能(obj、idx){

origclass基本上,通过重载运算符,您可以获得任何您想要的行为。使用以下代码,括号被重载,以实现您想要它们的行为方式:

# overload the brackets for reading out
"[.pmatch_vec" = function(obj,idx){
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    return(obj[idx])
  else
    return(obj[grep(paste("^",idx,sep=""),names(obj))])
}

# overload the assignment operator []<- 
"[<-.pmatch_vec" = function(obj,idx,value){
  saveclass <- class(obj)
  origclass <- setdiff(class(obj),"pmatch_vec")
  if (length(origclass)==0) origclass <- ""
  class(obj) <- origclass
  if (!is.character(idx)) 
    obj[idx] <- value
  else
    obj[grep(paste("^",idx,sep=""),names(obj))] <- value
  class(obj) <- saveclass
  return(obj)
}
#重载括号以便读取
“[.pmatch_vec”=功能(obj、idx){

origclass Awesome“grep”-命令正是我想要的。它甚至可以在向量本身内部搜索,而不必将内容指定为名称。Awesome“grep”-命令正是我想要的。甚至可以在向量本身内部搜索,而不必将内容指定为名称。Awesome“grep”-命令正是我想要的。它甚至可以在向量本身内部搜索,而不必将内容指定为名称。“grep”命令太棒了"-命令正是我想要的。它甚至可以在向量本身内部搜索,而不必将内容指定为名称。谢谢你的回答!我不知道通过重载将代码弯曲到你想要的方式是如此容易。在我的例子中,这有点问题,因为它应该在一个包中工作,而我是一个小biI don’我对引入重载普通运算符并不谨慎!但我会记住你的建议我遇到了另一个用常规代码无法回避的问题:)谢谢你的回答!我不知道通过重载将代码弯曲到你想要的方式是如此容易。在我的情况下,这是一个小问题,因为它应该在Package中工作ge和我对引入重载普通运算符有点谨慎!但我会记住你的建议我遇到了另一个用常规代码无法回避的问题:)谢谢你的回答!我不知道通过重载来弯曲代码是如此容易。在我的情况下,这是一个小问题,因为它应该ld在一个包中工作,我对引入像这样的重载普通运算符有点谨慎!但我会记住你的建议我遇到了另一个用常规代码无法回避的问题:)谢谢你的回答!我没有意识到通过重载来弯曲代码是如此容易。在m中有点问题因为它应该在一个包中工作,我对引入重载的普通运算符有点谨慎!但我会记住你的建议,我遇到了另一个我用常规代码无法回避的问题:)