質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.27%

  • R

    196questions

    R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

RでのSOM 自己組織化マップ

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 55

mizuki2940

score 3

R初学者です.タイトルの通り,RでSOMをつくりたくいろんなサイトを参考に試行錯誤していますが,うまくいかず困っています.

こちらのサイトを参考に動かしてみました.
http://d.hatena.ne.jp/isseing333/20110224/1298512568

library(kohonen)
library(ggplot2)

#---ここのDimとUseDataを必要に応じて変更する
Dim     <- 10
UseData <- do.call(cbind, iris[, -5])
UseData <- scale(UseData)


#------SOMの実行
GRID      <- somgrid(xdim = Dim, ydim = Dim, topo = "hexa")
DataSom   <- som(UseData, grid = GRID)

DataHex       <- data.frame(DataSom$codes)
DataHexStd    <- data.frame(scale(DataHex))
DataHexStd$x  <- rep(1:Dim, Dim)
DataHexStd$y  <- rep(1:Dim, rep(Dim, Dim))

#---------グラフ
HighCol <- "#950000"
LowCol  <- "#3500BF"


#------textの追加
DataSomMap   <- data.frame(Data = 1:nrow(UseData), 
        x = DataSom$unit.classif - trunc((DataSom$unit.classif - 1)/Dim) * Dim, 
        y = trunc((DataSom$unit.classif - 1)/Dim) + 1)
DataSomMap$x <- DataSomMap$x + runif(nrow(UseData), -0.5, 0.5)
DataSomMap$y <- DataSomMap$y + runif(nrow(UseData), -0.5, 0.5)
DataSomMap   <- cbind(DataSomMap, UseData)


#------ggplot2
i <-1
ggplot(DataHexStd, aes(x, y, col = DataHexStd[, i])) + 
    scale_colour_gradient2(high = LowCol, low = HighCol) + 
    geom_point(size = 190 / Dim, shape = 15) + 
    opts(legend.position = "none", title = names(DataHexStd)[i])


しかし下記のようにエラーがでてきます.

> library(kohonen)
> library(ggplot2)
> 
> #---ここのDimとUseDataを必要に応じて変更する
> Dim     <- 10
> UseData <- do.call(cbind, iris[, -5])
> UseData <- scale(UseData)
> 
> 
> #------SOMの実行
> GRID      <- somgrid(xdim = Dim, ydim = Dim, topo = "hexa")
> DataSom   <- som(UseData, grid = GRID)
 som(UseData, grid = GRID) でエラー:  使われていない引数 (grid = GRID) 
> 
> DataHex       <- data.frame(DataSom$codes)
> DataHexStd    <- data.frame(scale(DataHex))
> DataHexStd$x  <- rep(1:Dim, Dim)
 `$<-.data.frame`(`*tmp*`, x, value = c(1L, 2L, 3L, 4L, 5L, 6L,  でエラー: 
  replacement has 100 rows, data has 0
> DataHexStd$y  <- rep(1:Dim, rep(Dim, Dim))
 `$<-.data.frame`(`*tmp*`, y, value = c(1L, 1L, 1L, 1L, 1L, 1L,  でエラー: 
  replacement has 100 rows, data has 0
> 
> #---------グラフ
> HighCol <- "#950000"
> LowCol  <- "#3500BF"
> 
> 
> #------textの追加
> DataSomMap   <- data.frame(Data = 1:nrow(UseData), 
+ x = DataSom$unit.classif - trunc((DataSom$unit.classif - 1)/Dim) * Dim, 
+ y = trunc((DataSom$unit.classif - 1)/Dim) + 1)
 data.frame(Data = 1:nrow(UseData), x = DataSom$unit.classif -  でエラー: 
   引数に異なる列数のデータフレームが含まれています: 150, 0 
> DataSomMap$x <- DataSomMap$x + runif(nrow(UseData), -0.5, 0.5)
 エラー:  オブジェクト 'DataSomMap' がありません 
> DataSomMap$y <- DataSomMap$y + runif(nrow(UseData), -0.5, 0.5)
 エラー:  オブジェクト 'DataSomMap' がありません 
> DataSomMap   <- cbind(DataSomMap, UseData)
 cbind(DataSomMap, UseData) でエラー: 
   オブジェクト 'DataSomMap' がありません 
> 
> 
> #------ggplot2
> i <-1
> ggplot(DataHexStd, aes(x, y, col = DataHexStd[, i])) + 
+ scale_colour_gradient2(high = LowCol, low = HighCol) + 
+ geom_point(size = 190 / Dim, shape = 15) + 
+ opts(legend.position = "none", title = names(DataHexStd)[i])
 opts(legend.position = "none", title = names(DataHexStd)[i]) でエラー: 
   関数 "opts" を見つけることができませんでした


将来的にはUseDataに図のようなcsvを入れたいと考えています.
イメージ説明

このエラーの詳細や対策方法などご教授いただけると幸いです.

//追記
Rを再起動したところ,下記のようなエラーが出ました.途中まではうまく通るようになったようです,回答ありがとうございます.

> library(kohonen)
> library(ggplot2)
> 
> #---ここのDimとUseDataを必要に応じて変更する
> Dim     <- 10
> UseData <- do.call(cbind, iris[, -5])
> UseData <- scale(UseData)
> 
> 
> #------SOMの実行
> GRID      <- somgrid(xdim = Dim, ydim = Dim, topo = "hexa")
> DataSom   <- som(UseData, grid = GRID)
> 
> DataHex       <- data.frame(DataSom$codes)
> DataHexStd    <- data.frame(scale(DataHex))
> DataHexStd$x  <- rep(1:Dim, Dim)
> DataHexStd$y  <- rep(1:Dim, rep(Dim, Dim))
> 
> #---------グラフ
> HighCol <- "#950000"
> LowCol  <- "#3500BF"
> 
> 
> #------textの追加
> DataSomMap   <- data.frame(Data = 1:nrow(UseData), 
+ x = DataSom$unit.classif - trunc((DataSom$unit.classif - 1)/Dim) * Dim, 
+ y = trunc((DataSom$unit.classif - 1)/Dim) + 1)
> DataSomMap$x <- DataSomMap$x + runif(nrow(UseData), -0.5, 0.5)
> DataSomMap$y <- DataSomMap$y + runif(nrow(UseData), -0.5, 0.5)
> DataSomMap   <- cbind(DataSomMap, UseData)
> 
> 
> #------ggplot2
> i <-1
> ggplot(DataHexStd, aes(x, y, col = DataHexStd[, i])) + 
+ scale_colour_gradient2(high = LowCol, low = HighCol) + 
+ geom_point(size = 190 / Dim, shape = 15) + 
+ opts(legend.position = "none", title = names(DataHexStd)[i])
 opts(legend.position = "none", title = names(DataHexStd)[i]) でエラー: 
   関数 "opts" を見つけることができませんでした 
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2018/01/11 14:43

    pythonではなくRでは?

    キャンセル

  • mizuki2940

    2018/01/11 14:47

    大変失礼いたしました。Rでございます。pythonでもできないかと同時に考えていたためおかしなことになってしまいました。

    キャンセル

回答 1

checkベストアンサー

0

やってみましたがsom(UseData, grid = GRID) でエラー:  使われていない引数 (grid = GRID)のエラーは再現しませんでした。
そもそも引数gridを受け付けていないというのがおかしいので、可能性として思いつくのは、試行錯誤の過程でsomが別のものに上書きされてしまっていることくらいです。
示されているログでこれ以降に出てくるエラーはいずれもDataSomの作成に失敗していることによる副次的なエラーであるように見えます。 

Rを再起動してみても状況は変わらないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/12 08:27

    回答ありがとうございます.再起動したところ,最後以外はうまくいくようになりました.ありがとうございます.最後の 関数 "opts" を見つけることができませんでした というエラーは再現できませんでしたでしょうか…?

    キャンセル

  • 2018/01/14 01:11

    optsはもうdeprecatedみたいです。今時はこうやるようです。
    http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/#changing-the-position-of-the-legend

    キャンセル

  • 2018/01/14 14:12

    なるほど,大変参考になりました.themeを使用することでうまくいきました!ありがとうございます.

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.27%

関連した質問

同じタグがついた質問を見る

  • R

    196questions

    R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。