你可以使用
scan
:
scan(text=substr(x,2,nchar(x)-1),sep=",")
[1] 0.50 0.25 0.75 0.50
我不确定性能是否是一个问题,但我很好奇所以这里有一个基准测试:
在较长的字符串上:
x <- paste0("{",paste(1:1e4,collapse=","),"}")
as.numeric(str_extract_all(x, "[0-9.]+")[[1]])
library(stringr)
microbenchmark::microbenchmark(
ak1 = as.numeric(str_extract_all(x, "[0-9.]+")[[1]]),
ak2 = as.numeric(regmatches(x, gregexpr("[0-9.]+", x))[[1]]),
ak3 = scan(text= gsub("[{}]", "", x), what = numeric(), sep="," , quiet = TRUE),
mkr = as.numeric(strsplit(gsub("[{}]","",x), split = ",")[[1]]),
sat = as.numeric(unlist( strsplit( gsub("[^0-9.,]", "", x), ",") ) ),
ry1 = as.numeric(strsplit(substr(x, 2, nchar(x) - 1), ',')[[1]]),
ry2 = as.numeric(strsplit(gsub('[{]|[}]', '', x), ',')[[1]]),
mm = scan(text=substr(x,2,nchar(x)-1),sep=",", quiet = TRUE),
unit = "relative"
)
在原始的短字符串中:
str_extract_all
函数来自于stringr
包,你需要将其包含进来。 - smci