🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
R

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

Q&A

1回答

1360閲覧

Rで繰り返し処理に関する質問。

sharo_ruka

総合スコア0

R

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

0グッド

0クリップ

投稿2021/01/19 08:03

前提・実現したいこと

Rで読み込んだデータの各行を参照し、計算を実施。

発生している問題・エラーメッセージ

エラーメッセージ 0 + x でエラー: 二項演算子の引数が数値ではありません ### 該当のソースコード ```R ソースコード library(data.table) library(dtw) x = fread("sample.csv") y = fread("sample.csv") y1 = y[,361] y2 = na.omit(y1) #各行とy2との計算 for ( i in 1:360){ x1 = x[,paste(i)] x2 = na.omit(x1) d = dtw(x2, y2, step.pattern = symmetric1) d$distance } ### 補足情報 各行にはNAが存在しているため、NAを削除したうえで各行(360行)それぞれと361行目でd%distanceの計算結果を出したいです。 おそらく#部分が間違っていることはわかるのですが、直し方や他に適切なやり方等あればご教授いただきたいです。

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

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

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

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

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

guest

回答1

0

データの中身がわからないこともあり直接的な解答は出来ません。気がついた点を幾つか書きます。

  • y[,361] -- 切り出されるのは「第361行」ではなく「第361列」です。
  • fread()をオプションパラメータ無しで使っていますが、ヘッダーがデータと認識されて取り込まれてしまったりしていませんか。
  • x[,paste(i)] -- このpasteは何か意味があるのですか?

最後に、ソースコードは<code></code>で挟んで示してください。

投稿2021/01/19 08:29

編集2021/01/19 08:30
KojiDoi

総合スコア13692

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

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

sharo_ruka

2021/01/19 08:39

一番最初のものは行と列の間違いです。当質問における行はすべて列の間違いです。 ヘッダーはデータとして取り込まれていないためそのまま使っています。 データの中身は月ごとの株価データになります。各列のヘッダーに年月が記載されており、そのまま下に株価の終値が続きます。 x1 = x[,i]とした結果、([.data.table`(x, , i) でエラー: j (the 2nd argument inside [...]) is a single symbol but column name 'i' is not found. Perhaps you intended DT[, ..i]. This difference to data.frame is deliberate and explained in FAQ 1.1.が出るため、浅学ではありますが自身で調べてpasteを使ってみました。
KojiDoi

2021/01/19 09:09

> x1 = x[,i]とした結果、 ああ、data.tableはそういう仕様でしたね。ここはx[,..i]と書くのがお勧めらしいです。 エラーが出てきた直後に、コマンドラインからtraceback()と打ってみてください。具体的にどこで引っかかったのかが解ると思います。その位置で参照しているデータが本当に期待したような形のデータになっているのかを確かめてください。
sharo_ruka

2021/01/19 09:42

重ねて答えていただきありがとうございます。先述のアドバイスに従いソースコードを以下のようにしたところ。lm[1, 1] でエラー: 添え字が許される範囲外です 。 > traceback() 2: globalCostMatrix(lm, step.matrix = dir, window.function = wfun, seed = precm, ...) 1: dtw(r, s, step.pattern = symmetric1) > といったエラーが出てしまいました。x[,..i]の..iの部分を数字(例えば1など)にして、for文を外したときは計算できるのですが、どのようにすればよいのでしょうか?質問が多く大変申し訳ございません <code>library(data.table) library(dtw) x = fread("sample.csv") y = fread("sample.csv") y1 = y[,361] y2 = na.omit(y1) #各行とy2との計算 for ( i in 1:360){ x1 = x[,..i] x2 = na.omit(x1) d = dtw(x2, y2, step.pattern = symmetric1) d$distance }</code>
KojiDoi

2021/01/19 16:22

<code>はコメントに追記するのではなく質問文の方を修正するのですよ。 うまくいったデータとエラーが出たデータをチェックしてみるしかありませんね。たとえばstr(x[,1])とstr(x[,..i])を出力して見比べてみると何か分かるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問