为列表中的每个项目修剪字符后的文本-R

为列表中的每个项目修剪字符后的文本-R,r,R,我试图删除前面的文本,并为列表中的每个元素包含一个字符(“-”) 前- 期望输出: "b" "c" "d" "b" "f" 我尝试过使用lappy和gsub的各种组合,例如 lapply(x,gsub,'.*-','',x) 但这只是返回一个空列表- [[1]] [1] "" [[2]] [1] "" 并且只使用 gsub(".*-","",x) 返回 "d\")" "f\")" 这可以通过for循环完成 val<-list() for(i in 1:length(x

我试图删除前面的文本,并为列表中的每个元素包含一个字符(“-”)

前-

期望输出:

"b" "c" "d"     
"b" "f"
我尝试过使用
lappy
gsub
的各种组合,例如

lapply(x,gsub,'.*-','',x)
但这只是返回一个空列表-

[[1]]
[1] ""

[[2]]
[1] ""
并且只使用

gsub(".*-","",x)
返回

"d\")" "f\")"

这可以通过for循环完成

val<-list()
for(i in 1:length(x)){
  val[[i]]<-gsub('.*-',"",x[[i]])}
val
[[1]]
[1] "b" "c" "d"

[[2]]
[1] "b" "f"

val很接近,但是使用
lappy
gsub
时,R不知道哪个参数是哪个参数。您只需要显式地标记参数

x <- list(c("a-b","b-c","c-d"),c("a-b","e-f"))
lapply(x, gsub, pattern = "^.*-", replacement = "")
(+1)可能将模式更改为
^.*-
(或
^\\w-
)以仅替换前导(单个)字符,这可能会更安全一些。
x <- list(c("a-b","b-c","c-d"),c("a-b","e-f"))
lapply(x, gsub, pattern = "^.*-", replacement = "")
[[1]]
[1] "b" "c" "d"

[[2]]
[1] "b" "f"