将由单个数字和序列组成的字符串转换为允许子集向量或数据帧的格式

convert string consisting of individual numbers and sequences to format which allows subsetting a vector or dataframe

我的问题涉及将由单个数字和序列组成的字符串转换为一种格式,这使我可以对向量或数据帧进行子集化。背景:字符串源自 .csv 中的一个单元格,它作为配置文件读入,应该用于子集数据帧的某些元素 automatically/without 手动输入它,如 my_vec[c(1 ,5,10:13,90)]。症结在于各个数字中的顺序。否则按“,”的 strsplit() 将提供所需的结果。

subsetting_string<-"1,5,10:13,90"

我希望这个 string/character 能够对例如从 1 到 100 的向量进行子集化

my_vec<-seq(1,100,1)

接收结果

[1] 1 5 10 11 12 13 90

重要提示:我不是在寻找以下程序,我已经知道:

my_vec[c(1,5,10:20,90)]

但是如何convert/process 将字符串(字符)直接用作[] 括号内的索引元素?我对 sub()、substr()、strsplit()、paste() 和 noquote() 进行了很多尝试,但直到现在我总是失败。

有人可以帮我吗?

我们可以用逗号 (,) 分割 (strsplit) 并用 lapply/sapply 遍历每个元素,做一个 evaluation 和 unlist 创建一个向量

ind <- unlist(sapply(strsplit(subsetting_string, ",")[[1]], 
    function(x) eval(parse(text = x))), use.names = FALSE)

-输出

> ind
[1]  1  5 10 11 12 13 90