在 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)
一直在尝试编写一个自定义函数,该函数将变量名称输出为来自输入对象 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)