[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/17 13:22 / Filesize : 381 KB / Number-of Response : 837
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【R言語】統計解析フリーソフトR 第4章【GNU R】



1 名前:132人目の素数さん mailto:sage [2011/01/09(日) 17:31:49 ]
R は統計計算とグラフィックスのための言語・環境です。
統計計算で重宝するデータ型や、複数要素を処理する演算や関数、
解析結果を表示するグラフィックなど、多彩な機能を提供します。

●関連サイト
The R Project
www.r-project.org/
RjpWiki
www.okada.jp.org/RWiki/
リンク集
www.okada.jp.org/RWiki/?%A5%EA%A5%F3%A5%AF%BD%B8

620 名前:132人目の素数さん mailto:sage [2012/09/19(水) 00:02:17.70 ]
>>618
そういわれるとそうなのです

ただ、問題は>>617なので、なぜそうなるのか分かって、
そこだけ回避できるようになれればよいのですが・・・


621 名前:132人目の素数さん mailto:sage [2012/09/19(水) 09:39:21.27 ]
そもそも全部描画できたとして、それは見るに耐えるものなのか?
例えば散布図なんかだと100万点どころか、1万点ですら多すぎて見づらいから、適切に間引くのが普通だ。

622 名前:132人目の素数さん mailto:sage [2012/09/20(木) 10:57:36.08 ]
>>620
症状から考えて
ggplot2内部的に、
画面表示や画像ファイル保存などの描画時に、
データフレームをSVGみたいな描画用データに変換してから
その描画用データを参照して描画するんだと思う
だから、100万データを扱うことはできても、
グラフ描画(保存も含む)ができない。
しかも、データをどれだけ分割しようと
最終的に描画する際には、
そのグラフに使用する全描画用データを
同時にメモリに保持している必要があるから、
分割が意味をなさない。

だから、どうしても100万データ分使いたいんだったら、
メモリオーバーしない量のデータで一旦画像に保存して、
その画像同士を重ね合わせるみたいな方法をとるしかないかな。
画像処理の手間が必要になりますが。

あるいは、グラフ用のデータを
ダイナミックアロケーションできるような方法が
あるのか知りませんが、なければ作るとか……w

623 名前:132人目の素数さん mailto:sage [2012/09/20(木) 16:26:54.47 ]
>>622
そうだな。>>622の言うとおり、ベクタ構造を保持するからメモリ不足になる。
適当なインターバルでラスタ変換をかませればよろし。
png()で分割出力して、system("convert ...")で重ねる。

624 名前:132人目の素数さん [2012/09/20(木) 22:19:32.83 ]
>>622
>>623
なるほど頭の中が整理されました!

・データの分布を壊さずにデータを間引く関数を作る
・分割描画して最後にラスタデータを統合する関数を作る
・高スペックPCを導入する()
のどれかって感じですね!

ちょっと試してみるデス

625 名前:625 mailto:sage [2012/09/21(金) 00:01:09.50 ]
√625 = 25


626 名前:132人目の素数さん mailto:sage [2012/09/26(水) 20:01:39.27 ]
質問です。
任意の行列xを縦に複数回並べたいです。
こんな感じで書いてみたのですが、
forを使わず作れますか、
rep関数だけで実現できないですか?


mat <- NULL
x <- matrix(1:9, 3, 3)
for(i in 1:5){
mat <- rbind(mat,x)
}
mat



627 名前:132人目の素数さん mailto:sage [2012/09/26(水) 22:27:54.77 ]
>>626
>rep関数だけで実現できないですか?
できる

ヒント:
> i <- 5; paste("rbind(", paste(rep("x", i), collapse = ","), ")")
[1] "rbind( x,x,x,x,x )"


628 名前:132人目の素数さん mailto:sage [2012/09/26(水) 23:09:49.40 ]
Reduce(rbind,lapply(1:5,function(x) matrix(1:9,3,3)))



629 名前:132人目の素数さん mailto:sage [2012/09/26(水) 23:40:06.82 ]
>>627-628 ありがとうございます\(^o^)/

630 名前:132人目の素数さん mailto:sage [2012/10/01(月) 04:48:45.78 ]
>>628
do.call(rbind,lapply(1:5,function(x) matrix(1:9,3)))
5回じゃなくてもっと沢山くっつけるならdo.callのほうが速いみたい

631 名前:132人目の素数さん mailto:sage [2012/10/01(月) 23:26:00.72 ]
Rってこれから主流になるんですか?
ビッグデータ界隈でR!R!R!騒がしいです。

632 名前:132人目の素数さん mailto:sage [2012/10/02(火) 12:27:05.94 ]
主流になるのではないかと言われているけど、必ずそうなるとは言い切れない。
でも使えておいて損はないと思うよ。

633 名前:132人目の素数さん mailto:sage [2012/10/02(火) 15:05:16.56 ]
>>631
ビッグデータって何GBくらい?

素朴に考えると、Rらしいプログラムの書き方で処理するときには、
データを全てPCのメモリ上に読み込まなければならない。

しかし、オラクルに格納されたデータが、
PC1台のメモリにスッポリ収まるとはとうてい考えられない。

634 名前:132人目の素数さん mailto:sage [2012/10/02(火) 19:43:58.58 ]
>>633
それは時代遅れ。大規模なデータ処理では、データを固定したまま
処理をおこなう処理系自体をデータのあるところに移動しないと間に合わない。

既に昨年、Oracle社はデータはRDBMS上においたまま Rのコードを
実行できる仕組みを提案してるよ。フロントエンドはRで、実行はRDBMSか、
おそらく Exadata という専用ハードの上で行うと思う。

ttps://blogs.oracle.com/dbjp/entry/bigdata_000217

635 名前:132人目の素数さん mailto:sage [2012/10/02(火) 20:20:33.97 ]
>>634
なるほど、オラクルサーバがR(互換)インタプリタを内蔵しているというわけですか。
Rが凄いというよりもORACLEの商魂が凄い。

そういえば、DBMSや統計ソフトのベンダーが
「顧客のニーズを読めてませんでした」とか言ったらギャグになる。

636 名前:132人目の素数さん mailto:sage [2012/10/03(水) 20:37:17.21 ]
>>634
その手の話はOracleに限った話ではない
www.revolutionanalytics.com/products/revolution-enterprise-for-ibm-netezza.php

と言うより、Oracle使ってた人がRなんか使うのかね?
そういう人はSASとか使うような気がするが。

637 名前:132人目の素数さん mailto:sage [2012/10/03(水) 22:48:32.44 ]
>>636
うちはOracleとRを使ってる。会社のデータはOracleで管理してるが、
それを可視化したり、対話的に解析するのにRが便利。
両者はODBCデータソース経由でシームレスに繋がる。

確かにSASはいいんだけどライセンス料金が高いので使える人が
限られてしまうが、Rならそういうこと気にせずに済むのがいい。
ただしRはサポートが課題になりやすいけどね。

もしOracleが有償でもRのサポート提供するなら、それを評価する
企業ユーザもいるんじゃないかな?

638 名前:132人目の素数さん [2012/10/03(水) 23:16:24.69 ]
Rで分析が済ませるデータ量の会社はそれでもいいけど、そんな会社はDB側もAccessで十分そうね。



639 名前:132人目の素数さん mailto:sage [2012/10/03(水) 23:33:39.40 ]
Rでは社内で解析したものを環境丸ごと渡して
加工してもらうこともできるのかな?

640 名前:132人目の素数さん [2012/10/03(水) 23:44:58.20 ]
データサイエンティストとして経験を積むにはどの業界が良いのだろうか?
色々考えてみた。

SNS データ量が多い。分析前提でDBが設計してある。データドリブンが前提
銀行 顧客属性、預貯金データ保有、ローン情報
保険 顧客属性、病歴情報保有
クレジットカード 顧客属性、ローン情報、購買データ保有

SNSかクレジットカードだろうか。

641 名前:132人目の素数さん mailto:sage [2012/10/03(水) 23:53:37.59 ]
Tポイントカードの新会社だろ、JK!w

642 名前:132人目の素数さん mailto:sage [2012/10/03(水) 23:56:05.36 ]
POSデータがあれば、どこでもおk

643 名前:132人目の素数さん mailto:sage [2012/10/04(木) 00:01:14.41 ]
Tポイントカード、POSデータの情報量なんてたかが知れてると思うな。

644 名前:132人目の素数さん mailto:sage [2012/10/04(木) 00:28:41.27 ]
>>637
SASのライセンス料を気にしてOracleのライセンス料を気にしないのは謎だな
Oracleでまともにビッグデータを扱うと千万円の単位では済まないのに…

645 名前:132人目の素数さん mailto:sage [2012/10/04(木) 15:32:50.43 ]
企業のことは分からないが、
PostgreSQL + Rという組み合わせは論外なのかな?

646 名前:132人目の素数さん mailto:sage [2012/10/04(木) 20:11:25.61 ]
>>645
PostgreSQLはBSDライセンスで、RはGPLじゃなかったっけ?
言語処理系部分の流用は出来ないんじゃないの?

647 名前:132人目の素数さん [2012/10/04(木) 21:31:10.07 ]
>>644
Oracle は基幹系の投資に含めやすいし、実際に支払うライセンス料は
年間サポート料やコンサル費に比べれば大した金額じゃないと思う。
むしろコンサル費がべらぼうに高い。

その延長でゆくと、分析ツールはSASでもRでもいいが、こういう分析ツールを
活用できる社員を育成するのに金が掛かるし、企業での課題だと思う。
ちょっと外れてきたね。

648 名前:132人目の素数さん [2012/10/04(木) 22:57:30.45 ]
Postgre + R だと生データを直接処理(モデリング)できないでしょ。
それこそ、MapReduceみたいな処理の分散を自分で考えないといけない。



649 名前:132人目の素数さん mailto:sage [2012/10/05(金) 00:20:41.39 ]
>>626
x <- matrix(1:9, 3)
x[rep(1:3,5),]

650 名前:132人目の素数さん mailto:sage [2012/10/05(金) 01:07:56.33 ]
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/

651 名前:132人目の素数さん [2012/10/08(月) 17:00:48.41 ]
SNSの出身の人はビジネスセンスに欠ける気がする。
もしかしたら、それは旧時代的なビジネスセンスで、SNS出身の人のは新時代のものかもしれないけど。

・・・ないな。

652 名前:132人目の素数さん [2012/10/08(月) 17:29:34.67 ]
頭の古い人はいつでも置き去りにされる。

653 名前:132人目の素数さん mailto:sage [2012/10/08(月) 17:43:54.24 ]
統計解析全体がオカルトだというとらえ方もあるけどね。

> 活用できる社員を育成するのに金が掛かるし、企業での課題だと思う。

亀の甲羅を火にあぶる司祭たち……

654 名前:132人目の素数さん mailto:age [2012/10/08(月) 18:07:35.04 ]
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/

655 名前:132人目の素数さん mailto:sage [2012/10/12(金) 10:40:00.67 ]
N行M列のXを
要素M個のリストにしたいです。

x <- matrix(1:9, 3)
x_list <- list(x[,1], x[,2], x[,3])


as.list(x)でやると要素9になってしまいます。
要素M個にしたい場合は、どうすればいいですか?

656 名前:132人目の素数さん mailto:sage [2012/10/12(金) 11:49:23.96 ]
できました!

split(x, col(x))

>知っているといつか役に立つ(?)関数達 - RjpWiki
(6) ベクトル、行列、データフレームをある性質で分割する、split(x,f)

657 名前:132人目の素数さん mailto:sage [2012/10/14(日) 11:18:40.27 ]
↓これ、apply系の関数でうまくできないですか?教えてください。

x = matrix(1:12, 3, 4)
y = c(2, 5, 10)

x[1,] + y[1]
x[2,] + y[2]
x[3,] + y[1]

658 名前:132人目の素数さん mailto:sage [2012/10/14(日) 11:48:08.74 ]
>>657
> x[1,] + y[1]
> x[2,] + y[2]
> x[3,] + y[1]

x[1:3,]+y[c(1,2,1)]



659 名前:132人目の素数さん mailto:sage [2012/10/15(月) 13:56:05.47 ]
>>657
これでもできる。xに対して縦にしたベクトルを横に走らせながら足し算するみたいな意味。
sweep(x, 1, y[c(1,2,1)], "+")

660 名前:馬と鹿と豚さん mailto:age [2012/11/05(月) 13:00:29.47 ]
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   
.     |   \ ∠イ  ,イイ|    ,`-' |      
     |     l^,人|  ` `-'     ゝ  |        このスレは馬と鹿と豚ばかりね。
      |      ` -'\       ー'  人            
    |        /(l     __/  ヽ、          
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/

661 名前:132人目の素数さん mailto:sage [2012/11/09(金) 15:34:45.80 ]
これって、Rで描けますか?
homepage2.nifty.com/nandemoarchive/toukei_hosoku/gazou/anova_jizen_kentei_03.png

回帰直線の例である、よく教科書に載ってる図で、
「誤差が正規分布」してる様子を表したいです。

確率密度関数のプロット図を横に複数個並べたいんです。

662 名前:132人目の素数さん mailto:sage [2012/11/09(金) 15:48:43.41 ]
これです。単回帰モデルの図をRで描けますか?
t2.gstatic.com/images?q=tbn:ANd9GcSrGXCsyQu2rLsUEyeHakE0NWzk9-6hHsQhc390LDitoxLXxr0UydG2HTDv

663 名前:132人目の素数さん mailto:sage [2012/11/09(金) 16:13:59.17 ]
>>661
描ける。でもちょっと頭の体操が必要かも。

>>662
同上。でもオレならPGF/Tikzで描くかな。
ttp://www.texample.net/tikz/examples/feature/plotting/

664 名前:663 mailto:sage [2012/11/09(金) 17:14:42.51 ]
時間があったので、コーディングしてみた。
RjpWikiと違って図を載せられないし、半角スペースは削除されるので、
わかりにくいかも知れない。

# サンプルデータ
dat <- data.frame(x = c(rnorm(50) - 2, rnorm(50), rnorm(50) + 2),
g = c(rep("x", 50), rep("y", 50), rep("z", 50)))

# 作図
d <- tapply(dat$x, dat$g, density)
plot(as.numeric(dat$g), dat$x, xlim = c(0, 4), axes = FALSE,
xlab="", ylab="x")
lines(d[[1]]$y + 1, d[[1]]$x)
lines(d[[2]]$y + 2, d[[2]]$x)
lines(d[[3]]$y + 3, d[[3]]$x)
axis(2)
axis(1, at = 1:3, labels = LETTERS[24:26])
あとはsegments()で適当に赤の横破線を引いてくれ

665 名前:132人目の素数さん mailto:sage [2012/11/09(金) 21:12:18.68 ]
>>664 おぉー!ありがとうございます!!

666 名前:132人目の素数さん mailto:sage [2012/11/28(水) 20:53:30.87 ]
初心者ですがロジットモデルを作る際に
Lapack routine dgesv:システムは正確に特異です という意味不明なメッセージが...
変数ごとの尺度が違いすぎると発生するってことで一部に1/100したりしてみたけど
変わらず出てしまう...「そのエラー文こんな場合に出てくるでー」みたいなのあれば教えて頂けるとありがたいです.

667 名前:132人目の素数さん mailto:sage [2012/11/28(水) 21:07:45.01 ]
ロジットモデルが何か知らないけど、
エラー文でググると、

>分散共分散行列の行列式が正定値では無いため

668 名前:132人目の素数さん mailto:sage [2012/11/28(水) 21:27:27.31 ]
>>667
ありがとうございます!
分散共分散行列、正定値か...初めての単語です.
調べてみようっと



669 名前:132人目の素数さん mailto:sage [2012/11/28(水) 22:30:52.44 ]
>>666
singularって単数と思っていたが、数学では「特異」なんだな。
勉強になった。

670 名前:132人目の素数さん mailto:sage [2012/11/29(木) 22:21:50.04 ]
>>669
singular matrixって、逆行列を持たない行列。つまり
1 2
2 4
とか、そういうやつじゃないの?

Octaveでそういうのをやると

octave-3.2.4.exe> A=[[1,2];[3,4]]
A =

1 2
3 4

octave-3.2.4.exe> inv(A)
ans =

-2.00000 1.00000
1.50000 -0.50000

octave-3.2.4.exe:> A=[[1,2];[2,4]]
A =

1 2
2 4

octave-3.2.4.exe> inv(A)
warning: inverse: matrix singular to machine precision, rcond = 0
ans =

Inf Inf
Inf Inf

671 名前:132人目の素数さん [2012/11/30(金) 15:39:16.01 ]
sortとprintとあわせて使えませんか?

672 名前:132人目の素数さん mailto:sage [2012/12/01(土) 09:59:19.11 ]
2012/12/01 10:00〜

R研究集会 「データ解析環境Rの整備と利用」2012
live.nicovideo.jp/watch/lv116268591

673 名前:132人目の素数さん mailto:sage [2012/12/03(月) 20:43:08.44 ]
>>671
それは質問かい?
それとも上のどこかの書き込みの対する助言かい?

674 名前:132人目の素数さん mailto:sage [2012/12/04(火) 10:40:04.46 ]
すみません、質問です

id time sex
1 13 male
2 24 female
・・・
てな感じのデータ(population)を、timeでヒストグラムを書いた時にsexで色分けしたいのですが
基本グラフィックを使った方法で何か良いのは無いでしょうか?

ちなみにggplot2だと以下のコマンドで出来ますが、基本グラフィックで書く必要があります
ggplot(population, aes(time, fill=sex))+geom_histogram()

675 名前:132人目の素数さん mailto:sage [2012/12/04(火) 11:26:35.26 ]
>>674
hist()はグループ分けができません。

> set.seed(1234)
> a <- data.frame(time = round(rnorm(100)^2*10+5), sex = sample(as.factor(c("male", "female")), 100, replace = TRUE))
と適当なサンプルで、
> max(a$time)
[1] 70
なので、0から100まで10刻みで頻度を計算して棒グラフを書けばよいのでは。

> brks <- (0:5)*4
> b <- cbind(table(findInterval(a$time[a$sex == "male"], brks)), table(findInterval(a$time[a$sex == "female"], brks)))
> barplot(t(b), beside = TRUE, names.arg = brks[as.integer(row.names(b))])

参考まで。

676 名前:132人目の素数さん mailto:sage [2012/12/05(水) 08:26:29.52 ]
>>675
なるほど、histはグループ分けが出来ないのですね・・・
アドバイスに従って棒グラフで作成してみます
回答ありがとうございました

677 名前:132人目の素数さん mailto:sage [2012/12/18(火) 04:57:50.10 ]
リストの各要素を変数に代入したいです。
今は↓こんな感じでやってるのですが、要素数が増えると面倒で、
良いやり方があれば教えてください。

m = list(1, 2, 3, 4)

a = m[[1]]
b = m[[2]]
c = m[[3]]
d = m[[4]]

678 名前:132人目の素数さん mailto:sage [2012/12/18(火) 07:38:18.90 ]
lapply(1:4, function(k) assign(letters[k], m[[k]], envir = .GlobalEnv))
うーん、あんま短くないか。



679 名前:132人目の素数さん mailto:sage [2012/12/18(火) 11:05:31.28 ]
>>677
>>678が示すように、assignを使えばよいよ。

for()を使うならこんか感じ。

## mを適当に用意
m <- lapply(1:4,function(x){sample(month.name, 3)})

v.name <- letters[1:4] #変数名を準備
for(i in 1:length(v.name)) assign(v.name[i], m[[i]])

>>678
試さないで質問して申し訳ないけど、.GlovalEnvの指定は必須?
envirの指定を省略すれば.GlovalEnvになるのかなとと思って。

680 名前:132人目の素数さん mailto:sage [2012/12/18(火) 14:51:39.01 ]
>>678-679 できました。ありがとうございます!

681 名前:132人目の素数さん mailto:sage [2012/12/21(金) 23:08:27.59 ]
データフレームがあって、A列にコード、B列にファクター値が入っております。
このデータフレームをファクター値によって5分割したいのですが、
ループを使わない簡単な方法ありますでしょうか?

現在はquantile関数とforループを併用しております。

よろしくお願いいたします。

682 名前:132人目の素数さん mailto:sage [2012/12/22(土) 05:08:48.15 ]
>>681
>ファクター値
どういう意味?
因子型変数が内部で保持している実体の整数型の値のこと?
例を示してくれないと、その説明ではどうしたいのか分からない。

683 名前:132人目の素数さん mailto:sage [2012/12/22(土) 06:30:38.17 ]
>>681
split(x, x$B)
ってこと?

684 名前:681 mailto:sage [2012/12/22(土) 09:52:42.80 ]
>>682,>>683
ありがとうございます。

説明が悪くて申し訳ありません。
ファクター値は因子ではありません。
只の実数値の意味です。

DF
CODE DATA
"A" 1
"B" 2
"C" 3
"D" 4
"E" 5

と単純なデータフレームを考えた場合、
DATAの大きさでデータフレームを分割し5個のデータフレームにしたいのです。
現状はforループとquantile(DF$B, prob = i / 5)という関数を用いて分割している次第です。

よろしくお願いいたします。

685 名前:132人目の素数さん mailto:sage [2012/12/22(土) 12:16:27.28 ]
>>684
意味が全く分からないのはオレだけか?
そもそもDF$Bやiはどこから出てきたんだ。
data.frameの要素にdata.frameを入れた階層構造なのか?

もしかすると、こういうことか?
> DF <- data.frame(CODE = sample(LETTERS, 100, replace = TRUE), DATA = sample(1:5, 100, replace = TRUE))
というDFがあったとして、
> lapply(unique(DF$DATA), function(x){DF[DF$DATA == x, ]})
とすると5つのデータフレームをもつリストが出来る。

686 名前:681 mailto:sage [2012/12/22(土) 12:33:52.37 ]
>>685
申し訳ありません。DF$BではなくDF$DATAです。

ご提示していただいた例ですとDATAが整数の場合には正しく分割できるのですが、
実際には整数ではなく実数値です。

例えば、
DF <- data.frame(rand)
colnames(DF) <- c("a", "b", "c")

というデータフレームを作成した場合、DF$bの大きさで任意の分位に分割したいのです。。。。

687 名前:132人目の素数さん mailto:sage [2012/12/22(土) 13:38:29.27 ]
>>686
まだ意味が分からないorz
回答する側に憶測に憶測を重ねさせる質問の仕方はどうなのか、
後出しがガシガシ出てくる質問の態度はいかがかと思うが、
丁寧な口調なので、もう1度だけ「想像」した範囲で答える。

> DF <- data.frame(a = runif(100), b = runif(100), c = runif(100))
というDFがあったとして、DF$bを任意の分位、たとえば、0.1と0.3と0.5と0.9で区切って5分割したいとする。
> i <- findInterval(DF$b, c(0.1, 0.3, 0.5, 0.9))
> lapply(unique(i), function(x){DF$b[x == i]})
これで5分割されたデータのリストが得られる。
データフレーム構造を保持したいという話なら、
> lapply(unique(i), function(x){DF[x == i, ]})

これでも、これが質問の意図と異なるなら、他の人にパス。

688 名前:687 mailto:sage [2012/12/22(土) 13:51:45.59 ]
unique(i)だと区分の順番が気になるので、順番通りにするように修正
> lapply(0:max(i), function(x){DF$b[x == i]})
および
> lapply(0:max(i), function(x){DF[x == i, ]})



689 名前:132人目の素数さん mailto:sage [2012/12/22(土) 20:11:43.37 ]
改行、空白がなくて読みにくコードを
見やすく自動で整形する方法ってありますか?

他の言語だと整形ツールがあるんだけど
Rにもあるのかな

690 名前:132人目の素数さん mailto:sage [2012/12/22(土) 23:19:32.32 ]
>>689
外部ツールとしてはないけど、そういう関数もある(名前は忘れた)。

691 名前:681 mailto:sage [2012/12/23(日) 01:16:13.76 ]
>>687
ありがとうございます。
分位は等分位です。
quantileで分位点を求めて、教えていただいた方法で無事いけました。

質問の仕方が悪かったようで申し訳ありませんでした。
以後気を付けたいと思います。

本当にありがとうございました

692 名前:132人目の素数さん mailto:sage [2012/12/23(日) 20:34:14.28 ]
>>689
https://github.com/yihui/formatR/wiki

693 名前:令嬢 mailto:sage [2012/12/23(日) 23:13:41.87 ]
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   私は只の数ヲタなんかとは付き合わないわ。
.     |   \ ∠イ  ,イイ|    ,`-' |      頭が良くて数学が出来てかっこいい人。それが必要条件よ。
     |     l^,人|  ` `-'     ゝ  |        さらに Ann.of Math に論文書けば十分条件にもなるわよ。
      |      ` -'\       ー'  人          一番嫌いなのは論文数を増やすためにくだらない論文を書いて
    |        /(l     __/  ヽ、           良い論文の出版を遅らせるお馬鹿な人。
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         あなたの論文が Ann of Math に accept される確率は?
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            それとも最近は Inv. Math. の方が上かしら?
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/

694 名前:132人目の素数さん mailto:sage [2012/12/25(火) 01:22:28.37 ]
各位に使用できる数字(または文字)に制限がある
n桁の整数(文字列)を生成したい。

1桁目: 1, 2
2桁目: 4, 5, 6
3桁目: 7, 8

この場合だと 2*3*2 = 12 通りの整数が作れます。
forを3重にすればできるのですが、このやり方は避けたい。
n桁になっても対応できるコードを書きたいです。

いいやり方、教えてください。

695 名前:132人目の素数さん mailto:sage [2012/12/25(火) 10:23:00.30 ]
>>694
またまた説明不足で不明瞭な質問が来た。同じ人か。

例では、3桁の12種類全ての整数(文字列)を得たいのか、
それとも1つの3桁の整数(文字列)を得たいのか、
判然としない。

後者と想定して、例示すると、
a <- list()
a[[1]] <- 1:2
a[[2]] <- 4:6
a[[3]] <- 7:8
というリストがあった場合、
> paste(sapply(a, sample, 1), collapse = "")
[1] "247"

aの要素数がn個でも(つまり、n桁でも)同じ。

696 名前:132人目の素数さん mailto:sage [2012/12/25(火) 21:10:27.10 ]
前者です。

[,1] [,2] [,3]
[1,] 1 4 7
[2,] 1 4 8
[3,] 1 5 7
[4,] 1 5 8
[5,] 1 6 7
[6,] 1 6 8
[7,] 2 4 7
[8,] 2 4 8
[9,] 2 5 7
[10,] 2 5 8
[11,] 2 6 7
[12,] 2 6 8

697 名前:695 mailto:sage [2012/12/25(火) 21:25:57.68 ]
>>696
それなら、expand.grid()を再帰的に使えば良い。
入れ子にするのは面倒なので二項演算子を定義すると、
> "%+%" <- function(x, y) apply(expand.grid(x, y), 1, paste, collapse = "")
> a[[1]] %+% a[[2]] %+% a[[3]]
[1] "147" "247" "157" "257" "167" "267" "148" "248" "158" "258" "168" "268"

あとはRecall()を使って、これを一般化すれば良い。
> f696 <- function(x) { f <- function(i){ if(i > 0) return(Recall(i - 1) %+% x[[i]])
+ else return("")}
+ return(f(length(x)))
+ }
> f696(a)
[1] "147" "247" "157" "257" "167" "267" "148" "248" "158" "258" "168" "268"

次に質問するときは、最初から>>696のように書いた方が良いよ。
または、
> forを3重にすればできるのですが、
この具体的なコードを書くとか。抽象的に説明すると、解釈の余地に幅が生まれる。

698 名前:132人目の素数さん mailto:sage [2012/12/25(火) 21:29:26.76 ]
>>697 親切にありがとうございます。精進します!



699 名前:695 mailto:sage [2012/12/25(火) 21:31:46.70 ]
あぁ、すまない。
n桁の整数は連結させるのではなく、
桁をばらばらにして行列にしたかったのか。
それなら話はもっと簡単だ。
pasteの処理をやめれば良い

700 名前:132人目の素数さん mailto:sage [2012/12/25(火) 22:31:04.88 ]
expand.grid(a)
(function() as.matrix((expand.grid(a)->x)[do.call(order, x),]))()

701 名前:132人目の素数さん mailto:sage [2012/12/26(水) 09:37:32.22 ]
>>700
あぁ、しまった。expand.grid()は3次元次元でも使えたのか。

>>700さんの別解。rev()を2重に使う。
as.matrix(rev(expand.grid(rev(a))))

702 名前:令嬢 mailto:age [2012/12/26(水) 21:17:40.81 ]
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   
.     |   \ ∠イ  ,イイ|    ,`-' |      
     |     l^,人|  ` `-'     ゝ  |        このスレには馬と鹿と豚さんしかいないのね。
      |      ` -'\       ー'  人            
    |        /(l     __/  ヽ、          
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/

703 名前:132人目の素数さん mailto:700 [2012/12/26(水) 23:44:03.23 ]
>>701
revの二重使いは柔軟な思考ですね。参考になりました。

704 名前:◆yEy4lYsULH68 mailto:age [2012/12/27(木) 09:03:34.27 ]


>増田哲也こそ笑い者。
>俺が逮捕されて懲戒免職させる日本こそ沈めって、一発逆転をねらっている愚民そのもの。
>

705 名前:132人目の素数さん mailto:sage [2012/12/29(土) 23:41:13.98 ]
データフレームにあるQ01, Q02, Q03, Q04...というような連番の変数って、分析の際にまとめて指定することはできないのでしょうか。
SASでQ01-Q50などとやるようなことをしたいのですが、方法がわかりません。ご存知の方、お教えください。
50項目で主成分分析をしようなどという場合を考えると、気が遠くなります。

706 名前:132人目の素数さん [2012/12/30(日) 07:20:47.80 ]
knowledge-bank.org/social/politics/?main=./003//001

707 名前:132人目の素数さん mailto:sage [2012/12/30(日) 08:39:23.19 ]
>>705
outcome ~ .
って指定するとすべての変数が入る

708 名前:132人目の素数さん mailto:sage [2012/12/30(日) 11:33:43.75 ]
>>705
できるけど、"Q01-Q50"のような記法ではできない。
>>707が助言するようにまるごと入れることもできるし、
paste()とas.formula()をつかって長いformulaを作成することもできる。
formulaのヘルプにある例
> xnam <- paste0("x", 1:25)
> (fmla <- as.formula(paste("y ~ ", paste(xnam, collapse= "+"))))
y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 +
x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 +
x22 + x23 + x24 + x25



709 名前:132人目の素数さん mailto:sage [2012/12/30(日) 12:25:38.54 ]
>>707,708
ありがとうございます。
これで、エクセルのオートフィルで変数リスト作成してRのコンソールに貼り付ける作業から解放されます。

710 名前:132人目の素数さん [2012/12/30(日) 14:53:50.70 ]


711 名前:132人目の素数さん [2012/12/30(日) 14:55:00.08 ]
私はR言語で学習をしている初心者です。
その中で、irisデータを用いてコマンドの学習をしているのですがエラーが出てしまい先に進めなくなってしまいました。
以下にコマンドを載せますものが私の用いたものです。

library(rpart)
library(adabag)
data <- iris
ndata <- nrow(data)
#乱数指定
set.seed(101)
#学習データ(data.learn)とテストデータ(data.test)に分ける
ridx <- sample(ndata, ndata * 0.5)
data.learn <- data[ridx,]
data.test <- data[-ridx,]

#3-fold crossvalidation、弱識別器の数を10とし、学習データに対しboostingを行ったものをdata.adaCvに代入
data.adaCv <- boosting.cv(Species ~ .,data = data.learn,v=3, mfinal = 10)

#テストデータに学習データを照らし合わせる。
resultPredict <- predict(data.adaCv, newdata = data.test, type="class")

というコマンドですが「predict」を行った際に

以下にエラー UseMethod("predict") :
'predict' をクラス "character" のオブジェクトに適用できるようなメソッドがありません

というエラーが出てしまい、ネットや参考文献を見てもわからず投稿させていただきました。
もしこのエラーの解決方法がお分かりのかたがいらっしゃいましたらよろしくお願いします。

712 名前:695 mailto:sage [2012/12/30(日) 20:21:19.02 ]
>>711
>以下にエラー UseMethod("predict") :
>'predict' をクラス "character" のオブジェクトに適用できるようなメソッドがありません
分かるも何も、書いてあるままだよ。
> class(data.adaCv)
[1] "list"
boosting.cv()は、predictメソッドをもつクラスを吐かず、単純にlistクラスを吐く。
それだけの話。

713 名前:132人目の素数さん mailto:sage [2012/12/30(日) 20:22:36.64 ]
>>712
名前欄にゴミが入ったorz

714 名前:132人目の素数さん [2012/12/30(日) 23:08:32.14 ]
>>712さん>>711です。回答ありがとうございます。
実行してみたところおっしゃたように"list"と出力されました。
ということはboosting.cvで得られた変数(data.adaCv)を用いての
predictはできないということでしょうか?
また、もしできるのであればそのコマンドと使用例を教えていただきたいです。
宜しくお願いします。

715 名前:132人目の素数さん mailto:age [2012/12/31(月) 15:27:18.84 ]
          __ノ)-'´ ̄ ̄`ー- 、_
        , '´  _. -‐'''"二ニニ=-`ヽ、
      /   /:::::; -‐''"        `ーノ
     /   /:::::/           \
     /    /::::::/          | | |  |
     |   |:::::/ /     |  | | | |  |
      |   |::/ / / |  | ||  | | ,ハ .| ,ハ|
      |   |/ / / /| ,ハノ| /|ノレ,ニ|ル' 
     |   |  | / / レ',二、レ′ ,ィイ|゙/   
.     |   \ ∠イ  ,イイ|    ,`-' |      
     |     l^,人|  ` `-'     ゝ  |        このスレには馬と鹿と豚さんしかいないのね。
      |      ` -'\       ー'  人            
    |        /(l     __/  ヽ、          
     |       (:::::`‐-、__  |::::`、     ヒニニヽ、         
    |      / `‐-、::::::::::`‐-、::::\   /,ニニ、\            
   |      |::::::::::::::::::|` -、:::::::,ヘ ̄|'、  ヒニ二、 \
.   |      /::::::::::::::::::|::::::::\/:::O`、::\   | '、   \
   |      /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ  ヽ、  |
  |      |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、  /:\__/‐、
  |      |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
   |     /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
   |    |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
    |   /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/

716 名前:132人目の素数さん mailto:sage [2013/01/02(水) 11:10:09.30 ]
ビギニングス to Rって読んだけど
プログラミング言語の解説というかRをアプリケーションとしてみた解説って感じで
言語的なことはほとんど勉強になりませんでしたね。
やっぱ俺はS言語の本読むべきでしたね。

717 名前:132人目の素数さん mailto:sage [2013/01/04(金) 09:40:38.25 ]
>>716
ttp://www.amazon.co.jp/dp/4873115795
ttp://www.amazon.co.jp/dp/4621061313

718 名前:132人目の素数さん mailto:sage [2013/01/04(金) 10:07:16.37 ]
>>714
Rjpwikiの方に書いたからもういいと思うのだけど、念のため。
boosting.cvの中身は見た?
bootsting()とpredict.boosting()を中で使っているよね。
> boosting.cv
function (formula, data, v = 10, boos = TRUE, mfinal = 100, coeflearn = "Breiman",
control)
{
vardep <- data[, as.character(formula[[2]])]
n <- length(vardep)
if (v > n)
stop(" v should be in [2, n]")
if (v < 2)
stop(" v should be in [2, n]")
predclass <- rep("O", n)
for (i in 1:v) {
test <- v * (0:floor(n/v)) + i
test <- test[test < n + 1]
fit <- boosting(formula, data[-test, ], boos, mfinal,
coeflearn, control = control)
fit.predict <- predict.boosting(fit, data[test, ])
predclass[test] <- fit.predict$class
cat("i: ", c(i, date()), "\n")
}
tabla <- table(predclass, vardep, dnn = c("Predicted Class",
"Observed Class"))
error <- 1 - sum(predclass == vardep)/n
output <- list(class = predclass, confusion = tabla, error = error)
}
<environment: namespace:adabag>
このfit.predictが欲しいなら、自分でbooting.cv()をコピーして編集すればよい。
そうじゃないなら、何をしたいのか、もっとはっきり伝えること。



719 名前:132人目の素数さん mailto:sage [2013/01/05(土) 03:55:18.11 ]
>>716
Rノウハウ本の購入層はやりたい解析があってそこまでたどり着ければいい
って人が大多数なんじゃないかな、んでそれにあわせた内容になってると
+αを求める人は多くは無いと思う

720 名前:132人目の素数さん [2013/01/05(土) 12:25:03.16 ]
<スプライン補間:yからxを予測する方法>

質問です。

x<-c(1,2,3,4,5,6)
y<-c(1,4,9,7,6,8)
というデータがあったとして、
sp<-smooth.spline(x,y)
predict(sp,x=2.5)
とすると、xが2.5のときのyの値は下記のように予測できます。
$x
[1] 2.5
$y
[1] 6.923206

逆にyからxを求める方法がお分かりの方、いらっしゃいましたらお教えください。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<381KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef