> charmatch("me", c("mean", "median", "mode"))この2つを組み合わせて,以下も確認できました。
[1] 0
> charmatch("med", c("mean", "median", "mode"))
[1] 2
> charmatch(c("me","med"), c("mean", "median", "mode"))さて,以下の例題を考えます。
[1] 0 2
v <- c("aa", "bb", "ab", "ba", "abab", "abba", "baba", "baab")複数の場合は「0」を返すという理解ですので,なぜ,「0」にならないのか,分かりません。
s1 <- c("aa","bb")
s2 <- c("ba","ab")
charmatch(s1, v)
charmatch(s2, v)
> charmatch(s1, v)
[1] 1 2
> charmatch(s2, v)
[1] 4 3
No.22663 Re: 【R】 文字列の部分的マッチング charmatch 【青木繁伸】 2019/01/03(Thu) 15:08
一番最初の定義があるからでは?
> 正確なマッチが一部だけのマッチより優先される(つまり,ターゲットの先頭部分に 値が正確にマッチし,更にターゲットのほうがより長いケース)。> charmatch(c("aa","bb"), c("aa", "aa", "bb", "ab", "ba", "abab", "abba", "baba", "baab")
+ )
[1] 0 3
> charmatch(c("aa","bb"), c("aa", "aas", "bb", "ab", "ba", "abab", "abba", "baba", "baab"))
[1] 1 3
> charmatch(c("aa","bb"), c("aaw", "aas", "bb", "ab", "ba", "abab", "abba", "baba", "baab"))
[1] 0 3
No.22664 Re: 【R】 文字列の部分的マッチング charmatch 【明石】 2019/01/03(Thu) 16:24
青木先生 様;
お忙しいところを失礼いたします,明石と申します。
新年明けましておめでとうございます。
青木先生がご指摘してくださいました箇所
> 正確なマッチが一部だけのマッチより優先される
> (つまり,ターゲットの先頭部分に 値が正確にマッチし,更にターゲットのほうがより長いケース)。
の意味を完全に理解できないでおりました。
大変に失礼いたしました。
---------------------------------------
青木先生,追加のご質問がございます。
何卒どうぞよろしくお願いいたします> s <- c("aa", "aa", "bb", "ab", "ba", "abab", "abba", "baba", "baab")sを対象として,ベクトルvを,grep()関数で部分一致照合させた添字番号を取得したい
> v <- c("aa", "bb", "ab", "ba")
>
> grep(v[1], s)
[1] 1 2 9
> grep(v[2], s)
[1] 3 7
> grep(v[3], s)
[1] 4 6 7 8 9
> grep(v[4], s)
[1] 5 6 7 8 9
と思っていますが,
grep()関数では,第一引数は単体で与える必要があることから,
上記のように,vの要素ごとにgrep()関数を呼ぶことになります。
ベクトル v と s を与えて,上記の結果(4本のベクトル)をリストで得る
Rプログラムをご教示いただければ大変に勉強になります。
新年早々,お手数をおかけいたします。
何卒どうぞよろしくお願いいたします。
No.22665 Re: 【R】 文字列の部分的マッチング charmatch 【青木繁伸】 2019/01/03(Thu) 18:32
sapply(v, grep, s) または lapply(v, grep, s) でできます> s <- c("aa", "aa", "bb", "ab", "ba", "abab", "abba", "baba", "baab")
> v <- c("aa", "bb", "ab", "ba")
> sapply(v, grep, s)
$aa
[1] 1 2 9
$bb
[1] 3 7
$ab
[1] 4 6 7 8 9
$ba
[1] 5 6 7 8 9
> lapply(v, grep, s)
[[1]]
[1] 1 2 9
[[2]]
[1] 3 7
[[3]]
[1] 4 6 7 8 9
[[4]]
[1] 5 6 7 8 9
No.22666 Re: 【R】 文字列の部分的マッチング charmatch 【明石】 2019/01/04(Fri) 08:19
青木先生 様;
お忙しいところを失礼いたします,明石と申します。
新年早々に,大変に良い勉強をさせていただきました。
この例題を通じて,今まで不得手であった sapply,lapplyも理解できました。
心から御礼を申し上げます。
No.22667 Re: 【R】 文字列の部分的マッチング charmatch 【明石】 2019/01/04(Fri) 17:07
青木先生 様;
お忙しいところを失礼いたします,明石と申します。
ベクトル v と s を与えて,部分一致照合の添字を得る方法のご教示をいただき,誠にありがとうございました。
大変に良い勉強をさせていただきました。s <- c("aa", "aa", "bb", "ab", "ba", "abab", "abba", "baba", "baab")取得した添字を用いて,要素を得ることができます。
v <- c("aa", "bb", "ab", "ba")
lapply(v, grep, s)
[[1]]
[1] 1 2 9
[[2]]
[1] 3 7
[[3]]
[1] 4 6 7 8 9
[[4]]
[1] 5 6 7 8 9> res <- lapply(v, grep, s)---------------------------------------
> s[res[[1]]]
[1] "aa" "aa" "baab"
> s[res[[2]]]
[1] "bb" "abba"
> s[res[[3]]]
[1] "ab" "abab" "abba" "baba" "baab"
> s[res[[4]]]
[1] "ba" "abab" "abba" "baba" "baab"
青木先生,追加のご質問がございます。
何卒どうぞよろしくお願いいたします
ベクトル v と s を与えて,部分一致照合の要素"aa" "aa" "baab"を得る方法をご教示いただければ,大変に勉強になります。
"bb" "abba"
"ab" "abab" "abba" "baba" "baab"
"ba" "abab" "abba" "baba" "baab"
お手数をおかけいたします。
何卒どうぞよろしくお願いいたします。
No.22668 Re: 【R】 文字列の部分的マッチング charmatch 【青木繁伸】 2019/01/04(Fri) 18:19
まあ,一行で書かなきゃいけないということでもないでしょうし,また,他に良い方法があるかもしれませんが,以下のようにすることでも出来なくはないです> sapply(sapply(v, grep, s), function(i) s[i])
$aa
[1] "aa" "aa" "baab"
$bb
[1] "bb" "abba"
$ab
[1] "ab" "abab" "abba" "baba" "baab"
$ba
[1] "ba" "abab" "abba" "baba" "baab"
No.22669 Re: 【R】 文字列の部分的マッチング charmatch 【明石】 2019/01/04(Fri) 18:58
青木先生 様;
お忙しいところを失礼いたします,明石と申します。
sapply(v, grep, s)で得た添字を,s[]に代入する試みをしていましたが,結局できませんでした。
ご教示いただきました関数を定義する方法を理解できました。
ありがたいご教示に,心から,心より感謝いたします。
ありがとうございました。
● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る