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

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

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

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

2415閲覧

R forループを活用し条件を変更したfilter関数の結果を別の変数に格納したい

minhouse10

総合スコア41

R

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

1クリップ

投稿2020/02/11 16:44

編集2020/02/12 05:13

以下の様にデータフレームに対するfilter関数の条件として1から30まで変更し、その結果についても数字を1から30までカウントアップする形でそれぞれ変数名+数字として格納したいのですが、自分にとってRは他のスクリプト言語の様にシンプルに書けず苦戦しております。どなたかアドバイス頂けますでしょうか?

hensu1 <- dataframe %>% filter(syurui == 1)
~
hensu30 <- dataframe %>% filter(syurui == 30)

以下のコードでは変数への代入の所がうまく行けば、期待した結果はとりあえず得られそうです。

>for (i in 1:30){paste("hensu",i,sep="") <- dataframe %>% filter(syurui == i)} Error in paste("hensu", i, sep = "") <- dataframe %>% filter(syurui == : target of assignment expands to non-language object

KojiDoki様にご教授頂いた内容で、期待通りの結果がリストhensuの各要素に格納されている事を確認致しました。

> layer <- list() > for(i in 1:30){ + hensu[[i]] <- dataframe %>% filter(syurui == i) + } > hensu[1]

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

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

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

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

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

guest

回答1

0

ベストアンサー

paste("hensu",i,sep="") <- dataframe

これではオブジェクトhensuXへの付値は成立しません。pasteは単に文字列の操作をするだけです。

意図通りの結果を得るには、次のようにする必要があります。

eval(parse(text=paste0("hensu",i," <- dataframe")))

しかし、こういうときはリストを使うのがベターでしょう。

hensu <- list() for(i in 1:30){ hensu[[i]] <- dataframe %>% filter(syurui == i) }

投稿2020/02/11 19:13

KojiDoi

総合スコア13671

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

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

minhouse10

2020/02/12 01:43

KojiDoi様、ご教授頂き本当にありがとうございます!eval関数との組み合わせで文字列をコマンドとして実行する方法もあるのですね。大変勉強になりました。
minhouse10

2020/02/12 03:57

KojiDoi様、度々申し訳ございません。実際にテストして致しました結果、hensu1から30に代入した結果がデータフレームの形式になっておらず、単に数字が格納されてしまっているようです。大変お手数ではございますが、よろしければテスト結果を追記させて頂きましたので、ご確認頂けますと幸いです。
minhouse10

2020/02/12 05:11

KojiDoi様、大変申し訳ありません、リストに格納しているので、データを取り出すときはhensu[1]とすべきでした。こちらの間違いでご回答頂いた内容にはなんら問題はございませんでした。重ねてお詫び申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問