0

次のコードがあるとします。

list = c("the", "at", "ok")
paragraph = "the cat ath the hat is ok"

リスト内のすべての単語を「段落」から削除するにはどうすればよいですか?

私はやってみました:

gsub(list, '', paragraph)

しかし、リストの最初の項目だけが削除されました。私はこれが複雑であってはならないことを知っていますが、これはまだ私を混乱させます. また、for ループの使用は避けたいのですが、apply ファミリーは問題ないはずです。

4

1 に答える 1

7

パターン"(the|at|ok)"は、リスト内の任意の文字列の出現と一致します。

ただし、実際の単語と一致させたいが、それらが含まれている単語とは一致させたくないように聞こえます(つまり、「the」とは一致するが「then」とは一致しない、「at」とは一致するが「rattle」とは一致しないなど)。 、代わりにパターンを使用できます"\\b(the|at|ok)\\b"(ここ"\\b"で、は単語の境界で一致するパターンです)。

paste0()一致する単語の任意のベクトルから必要なパターンを構築するために使用できます。

list <- c("the", "at", "ok")
paragraph <- "the cat ath the hat is ok"

## Construct the regular expression
pat <- paste0("\\b(", paste0(list, collapse="|"), ")\\b")    
pat
# [1] "\\b(the|at|ok)\\b"

## Use it
gsub(pat, "", paragraph)
# [1] " cat ath  hat is "
于 2012-12-13T06:38:45.273 に答える