误解子功能

时间:2018-05-31 19:58:20

标签: r regex gsub

我正在开发一个Shiny应用,它会循环播放一个html文件,用相对于其位置的不同短语替换短语的实例。

也就是说,第一次“aa”来了,我把“bluh”, 第二次“aa”来了,我把“gfgf”。

我按顺序列出了所有第二个短语。

我认为我误解了sub功能文档:

  

两个*子功能的不同之处仅在于子只替换了第一个   模式的出现,而gsub替换所有出现的事件。

但这是一个可重复性最小的例子:

tt <- c("aa", "aa","bb","aa")

sub("aa","test",tt)
# [1] "test" "test" "bb"   "test"

gsub("aa","test",tt)
# [1] "test" "test" "bb"   "test"

tt
# [1] "aa" "aa" "bb" "aa"

我期待

sub("aa","test",tt)
# [1] "test" "aa" "bb"   "aa"

这样我就可以循环去了:

og.list <- c("aa","cat","aa","cat","aa")

repl.list <- c("the","is","happy")

for(i in 1:3){
  og.list <- sub("aa",repl.list[i], og.list)
} 
相反,所有“aa”都变成了“the”。我认为这就是gsub所做的,但它同时是subgsub

谢谢。

2 个答案:

答案 0 :(得分:0)

 Thank you Wiktor^. 

我现在明白我需要将每个项目分成自己的字符串然后再分。

 og.list <- c("aa","cat","aa","cat","aa"
 repl.list <- c("the","is","happy")
 og.index <- grep("aa",og.list) 

 for(i in 1:3){ 
 curr.index <- og.index[i] 
 og.list[curr.index] <- sub("aa",
                             repl.list[i],
                             og.list[curr.index])
 } 

答案 1 :(得分:0)

我想你可能只想要这个:

og.list[og.list == "aa"] <- repl.list
#[1] "the"   "cat"   "is"    "cat"   "happy"