我有一个对象名称
Test12<-c(8,7,4,3,5,67,3,9,6,6,56,742,23,12,45,56)
我想从对象名称或Test12中提取最后两个数字,以分别获取数字1和2,并将它们放入两个对象中。
a<- 1
b<- 2
我试过
x <- name(Test12)
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
substrRight(x, 2)
[1] "8" "7" "4" "3" "5" "67" "3" "9" "6" "6" "56" "42" "23" "12" "45" "56"
但是我得到了每个对象元素的最后2个元素。
欢迎任何帮助
答案 0 :(得分:1)
您可以使用:
substrRight <- function(x, n){
substr(x, nchar(x)-n+1, nchar(x))
}
var.name <- deparse(substitute(test12))
var.nums <- substrRight(var.name, 2)
var.nums <- strsplit(var.nums, "")
var.nums <- unlist(var.nums)
var.nums <- as.vector(as.numeric(var.nums))
答案 1 :(得分:1)
nm <- bquote(Test12)
或
nm <- quote(Test12)
或
nm <- "Test12"
或
根据@ Al.Sal
nm <- deparse(substitute(Test12))
会工作,然后:
a <- substr(nm, nchar(nm)-1, nchar(nm)-1)
b <- substr(nm, nchar(nm), nchar(nm))
> a
[1] "1"
> b
[1] "2"
答案 2 :(得分:1)
您也可以尝试
library(stringr)
list2env(setNames(
as.list(str_extract_all(deparse(substitute(Test12)),
perl("\\d(?=\\b$)|\\d(?=[0-9]$)"))[[1]]),
letters[1:2]),
envir=.GlobalEnv)
a
#[1] "1"
b
#[1] "2"
deparse(substitute(Test12)) #gets the name of the object
#[1] "Test12"
正则表达式"\\d(?=\\b$)
匹配数字lookahead
,用于字符串|
末尾的字边界或\\d(?=[0-9]$)")
数字,lookahead
代表另一位数字字符串。
假设你的字符串是:
T95es34t12 <- 1:5
str_extract_all(deparse(substitute(T95es34t12)), perl("\\d(?=\\b$)|\\d(?=[0-9]$)"))[[1]]
#[1] "1" "2"
as.list
创建一个列表,然后使用a
使用b
,setNames
命名列表元素,并使用list2env
指定列表名称列表值的元素。