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

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

新規登録して質問してみよう
ただいま回答率
85.48%
R

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

Q&A

2回答

1234閲覧

seq(0,1,0.05)とc(0,0.05,0.1.....)は何が違うのか

Tadokoro

総合スコア14

R

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

0グッド

0クリップ

投稿2018/10/24 12:06

編集2018/10/25 05:16

前提・実現したいこと

カラムが2つあるデータフレームがあります。
1つは機械学習モデルが予測した「成功確率」(expect)でもうひとつが
実際に成功したかのフラグ(flg)です。
(成功の場合1,失敗の場合0)

この、データに対してexpectが「0%以上の場合」「5%以上の場合」「10%以上の場合」
と5%ずつ閾値をおいて、Xが閾値以上のデータのみを集計したい。

発生している問題

はじめこの処理を以下のように書いていました。

R

1for(n in seq(0,1,0.05)){ 2data2 <- data$flg[data&expect >= n] 3 処理 4}

しかし、このfor文の書き方では、なぜかところどころうまくいきません。
例えば「15%以上」で区切った処理結果が「20%以上」で区切った処理結果と同じになっていたり
「70%以上」で区切った処理結果が「75%以上」で区切った処理結果と同じになっていたりします。

なぜか処理が飛んでいるというか、全てではなくところどころ隣と同じ結果になってしまう現象になってしまっていました。
(抽象的な書き方ですみません。。。)

試したこと

はじめはデータのほうがおかしくてうまくマッチングできていないのかと思いましたが、
特に問題は見当たりませんでした。

結局以下のように書き直すことで正常に処理されるようになりました。

R

1num <- c(1,0.05,0.1,0.15.0.2....) 2for(n in num){ 3data2 <- data$flg[data&expect >= n] 4 処理 5}

typeofで見るとデータ型も両方double型でしたし、seq()で作ったベクトルとc()で手入力したベクトルの何が違うのかわかりません。。。
イテレータにseqを使うのはナンセンスなのでしょうか。。。

このままでは、今後ビビってseqを使えないため、
問題が発生した原因がわかる方いらっしゃいましたらご教示願いたいです。

環境

sessionInfo()の出力結果は以下の通りです。

R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932
[3] LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C
[5] LC_TIME=Japanese_Japan.932

attached base packages:
[1] stats graphics grDevices utils datasets methods base

loaded via a namespace (and not attached):
[1] compiler_3.5.1 tools_3.5.1

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2018/10/25 04:27

試してみようとしましたが、こちらでは現象を再現できませんでした。sessionInfo()を実行した結果を追記できますか?
Tadokoro

2018/10/25 05:23

追記いたしました!
guest

回答2

0

data$expectではありませんか?

投稿2018/10/25 05:56

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tadokoro

2018/10/25 09:07

回答ありがとうございます。 「試したこと」に記載した通り、イテレータを入れ替えれば ほしいデータが取得できるので、文法がそもそも間違っているということはないはずです。
KojiDoi

2018/10/26 04:06

こちらではやはり問題が再現しませんね。あとはexpectが何か想定外の内容となっていて悪さしている可能性しか思いつきません。文法は間違っていないと考えているようですが、それはたまたま問題が表に出てきてないだけの可能性もあります。この書法では論理積をとっていることになるのですが、それは本当に意図していることですか?
Tadokoro

2018/11/08 08:25

返答が遅くなり申し訳ありません。 KojiDoi様の仰る通りデータ側の不具合の可能性もあると思います。 (今回は他のメンバーの端末でも事象が再現しなかったため手書きのベクトルで乗り切りました)
guest

0

seqの使い方間違っていませんか?

seq(1,10,length=5) とか seq(1,10,by=2) のように使うのでは?

投稿2018/10/24 12:28

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tadokoro

2018/10/24 17:26

回答ありがとうございます。 seqはdefaultの第3引数がbyにあたるのでこの書き方であっていると思います。 仮に間違っていたとしても、この書き方で0から1まで0.05刻みのベクトルが 生成できることはコンソール上で確認できています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問