17

現在、R で文字ベクトルを使用しており、strsplit を使用して単語ごとに区切っています。リスト全体をチェックし、特定の単語がリストに含まれているかどうかを確認し、(可能であれば) リストのどの要素に含まれているかを確認するために使用できる関数があるかどうか疑問に思っています。

元。

a = c("a","b","c")
b= c("b","d","e")
c = c("a","e","f")

の場合z=list(a,b,c)f("a",z)最適に が得られ[1] 1 3f("b",z)最適に得られます[1] 1 2

どんな援助も素晴らしいでしょう。

4

3 に答える 3

28

alexwhan が言うように、grep使用する機能です。ただし、リストで使用する場合は注意してください。それはあなたが思っていることをしていません。例えば:

grep("c", z)
[1] 1 2 3   # ?

grep(",", z)
[1] 1 2 3   # ???

舞台裏で起こっていることgrepは、as.character. リストに適用すると、逆解析によって取得されas.characterたリストの文字表現が返されます。(アンリストをモジュロします。)

as.character(z)
[1] "c(\"a\", \"b\", \"c\")" "c(\"b\", \"d\", \"e\")" "c(\"a\", \"e\", \"f\")"

cat(as.character(z))
c("a", "b", "c") c("b", "d", "e") c("a", "e", "f")

これがgrep取り組んでいるものです。

grepリストで実行したい場合、より安全な方法は を使用することlapplyです。これにより、別のリストが返されます。このリストを操作して、関心のあるものを抽出できます。

res <- lapply(z, function(ch) grep("a", ch))
res
[[1]]
[1] 1

[[2]]
integer(0)

[[3]]
[1] 1


# which vectors contain a search term
sapply(res, function(x) length(x) > 0)
[1]  TRUE FALSE  TRUE
于 2013-06-28T06:38:04.493 に答える
6

あなたが探しているgrep()

grep("a", z)
#[1] 1 3

grep("b", z)
#[1] 1 2
于 2013-06-28T06:12:36.157 に答える