在 R 中使用 str_split() 从自定义函数中的 df$vector 中提取矢量名称

Extracting vector name from df$vector in custom function with str_split() in R

一直在尝试编写一个自定义函数,该函数将变量名称输出为来自输入对象 x 的字符串,输入对象 x 是来自数据帧的特定向量,即以 df$vector 的形式,因此它的功能如下

function(iris$Species)

>"Species"

目前我正在这样做:

vector.name<-function(x){
  require(stringr)
  
  #convert df$variable into string
  xname <- as.character(deparse(substitute(x)))
  
  if (str_detect(xname,"$")==T) {
    str_split(xname,"$")
  }
}  

但结果不尽如人意

> vector.name(iris$Species)
[[1]]
[1] "iris$Species" ""           

strsplit(){base}str_split(){stringr}我都试过了,它们都可以正常用于其他普通字母字符串,例如

> str_split(as.character(deparse(substitute(iris$Species))),"S")
[[1]]
[1] "iris$"  "pecies"

那么如何在自定义函数中从 df$vector 中提取 "vector"

$是匹配字符串结尾的元字符。转义 (\$) 或将其包裹在方括号 ([$]) 内,或使用 fixed 按字面意思评估字符

vector.name<-function(x){
 
 xname <- as.character(deparse(substitute(x)))
 if(stringr::str_detect(xname,fixed("$"))) {
    stringr::str_split(xname, fixed("$"))
  }
 
} 

-测试

vector.name(iris$Species)
[[1]]
[1] "iris"    "Species"

请注意,第一个 str_detect returns TRUE 中的 $ 只是巧合,没有别的,即 $ 本身会寻找字符串的结尾,它在所有字符串中匹配,无论它是否为空白

> str_detect("iris$Species", "$")
[1] TRUE
> str_detect("", "$")
[1] TRUE

相反,它将是

> str_detect("iris$Species", "\$")
[1] TRUE
> str_detect("", "\$")
[1] FALSE

类似str_split,因为它匹配字符串的结尾,它returns第二个元素为空白

> str_split("iris$Species", "$")
[[1]]
[1] "iris$Species" ""     

试试这个

Get <- function(x) {
       x <- deparse(substitute(x))
       gsub("^.+\$","",x)
}

Get(iris$Species)