【发布时间】:2017-10-11 12:21:43
【问题描述】:
我正在尝试编写一个函数,该函数通过使用模式向量中的连续元素重复拆分字符向量来构建矩阵。
让我们调用我正在尝试编写的函数str_split_vector()。这是我正在寻找的输出示例:
char <- c("A & P | B & C @ D",
"E & Q | F & G @ H",
"I & R | J & K @ L")
splits <- c(" \\| ", " & ", " @ ")
str_split_vector(char, splits)
# [,1] [,2] [,3] [,4]
# [1,] "A & P" "B" "C" "D"
# [2,] "E & Q" "F" "G" "H"
# [3,] "I & R" "J" "K" "L"
char 向量依次被每个模式分割,保持"A & P" 完好无损。 (尽管使用特定的正则表达式模式管理最后一点可能最容易。)
我只能通过一个漂亮的临时循环迭代地完成这项任务:
for(ii in 1:length(splits)) {
if(ii == 1) {
char_mat <- matrix(char)
char_mat <- do.call(rbind, strsplit(char_mat[ , ii], splits[ii]))
} else {
char_mat <- cbind(char_mat[ , 1:ii - 1],
do.call(rbind,
strsplit(char_mat[ , ii], splits[ii])
)
)
}
}
这个过程对我来说似乎效率低下,因为我正在“成长”char_mat 重复的cbind() 调用。更糟糕的是,如果不实际运行代码,我几乎不可能理解发生了什么。
有没有更简单的方法来写这个,可能会忽略"A & P"不被拆分的要求?
【问题讨论】:
-
str_split_vector来自哪里?什么包? -
对不起,这只是我为我正在尝试编写的这个函数提出一个名称。我将编辑问题以明确说明。
-
那么为什么
"A & P"也没有被拆分呢?你在splits中有" & "。 -
喜欢这个?
strsplit(char, paste(splits, collapse = "|")). -
@DavidArenburg 对,所以理想情况下,我希望能够从
strsplit()的下一个输入中删除以前“拆分”的字符串。 (因此char_mat[ , ii]在 for 循环中。)