R 原子向量中的部分匹配
有没有办法在原子向量中实现部分匹配?我知道$operator对原子向量不起作用,但我认为可以使用[[“I”,exact=FALSE]]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
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中有点问题因为它应该在一个包中工作,我对引入重载的普通运算符有点谨慎!但我会记住你的建议,我遇到了另一个我用常规代码无法回避的问题:)