teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記への対応

2018/06/18 16:35

投稿

KojiDoi
KojiDoi

スコア13727

answer CHANGED
@@ -4,4 +4,53 @@
4
4
  mylist <- paste(word_unlist, names(word_unlist), sep="_")
5
5
  ```
6
6
 
7
- RMeCabCなるものがどんな構造のデータを返してくるかは、`str(word)`などとして眺めてみるといいと思います。
7
+ RMeCabCなるものがどんな構造のデータを返してくるかは、`str(word)`などとして眺めてみるといいと思います。
8
+
9
+ ### 追加 2018/06/18 17:30をうけて追記
10
+
11
+ 乗りかかった舟で、手元のcentOSにRMeCabをインストールして眺めてみました。「リストが入れ子」とした推測は事実ではありませんでした。しかし回答者さんの認識もおそらく正確ではありません。
12
+
13
+ 多分回答者さんは、MeCabCが吐き出したlistであるwordの構造を次のようにとらえておられると思います。
14
+ ||リストの要素(単語)|名前(品詞)|
15
+ |:--|:--:|--:|
16
+ |1|いつも|副詞|
17
+ |2|答え|動詞|
18
+ |3|て|助詞|
19
+ |4|くれ|動詞|
20
+ |5|て|助詞|
21
+ |6|ありがとう|感動詞|
22
+
23
+ しかし正確には、次のようになっているのですね。
24
+ ||リストの要素|
25
+ |:--|:--:|
26
+ |1|1番目の単語に対応する名前付きベクトル|
27
+ |2|2番目の単語に対応する名前付きベクトル|
28
+ |3|3番目の単語に対応する名前付きベクトル|
29
+ |...|...|
30
+
31
+ ややこしいのですが、名前はwordを構成する6個の要素についているのではないのですね。
32
+
33
+ したがって、`names(word)`では品詞名は習得できません。しかし、`names(word[[1]])`とすれば`副詞`と返ってくるはずです。
34
+
35
+ ではここで、ちょっといたずらをしてみます。
36
+ ```
37
+ names(word) <- c("fukushi", "doushi", "joshi", "doushi", "joshi", "kandoushi")
38
+ ```
39
+ str(word)を見てみましょう。
40
+ ```
41
+ List of 6
42
+ $ fukushi : Named chr "いつも"
43
+ ..- attr(*, "names")= chr "副詞"
44
+ $ doushi : Named chr "答え"
45
+ ..- attr(*, "names")= chr "動詞"
46
+ $ joshi : Named chr "て"
47
+ ..- attr(*, "names")= chr "助詞"
48
+ $ doushi : Named chr "くれ"
49
+ ..- attr(*, "names")= chr "動詞"
50
+ $ joshi : Named chr "て"
51
+ ..- attr(*, "names")= chr "助詞"
52
+ $ kandoushi: Named chr "ありがとう"
53
+ ..- attr(*, "names")= chr "感動詞"
54
+ ```
55
+
56
+ 「リストの要素に名前がついている」のと「名前付きベクトルが要素になっている」の違いが分かるのではないでしょうか。