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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

708閲覧

eachで処理した数値データを配列にして、その要素をlengthで数えたい(最終的に移動平均を取りたい)

spu

総合スコア23

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

1クリップ

投稿2019/04/16 09:33

前提・実現したいこと

eachで処理した数値データを配列にして、その要素をlengthで数えたい
最終的にはデータの移動平均を取りたい

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

length がundefined methodになる

該当のソースコード

n = []
File.open("sample.txt") do |inFile|
inFile.each do |line|
next if /^#/ =~line
parts = line.gsub(" ","").split(',')
t = parts[0].to_f
n = parts[1].to_f
f1 = parts[2].to_f
end
end

puts n.length

(100..((n.length-1)-100)).each do |i|
printf "%10.5f%10d\n", t[i], n[(i-10)..(i+10)].mean
end

+++sample.txt++++++++++++
:#file
:1e0, 2e5, 4e3
:2e0, 3e4, 3e3
...
:2e2, 5e4, 5e3
+++++++++++++++++++++++++

補足情報

移動平均の部分は見様見真似で書いているだけで、
内容は把握しておらず、間違っているかもしれません。
ただし、今のエラーは別に原因があるようです。

全くの初心者です。よろしくお願い致します。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

n = parts[1].to_fで、nには数値が入っているので、lengthというメソッドはありません。

nは配列にしたいのでは?

投稿2019/04/16 12:31

otn

総合スコア84538

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

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

spu

2019/04/16 13:09 編集

仰る通りで、nは配列にしたいです。 サンプルコードで、要素数をlengthで数えているものがあったのですが、lengthは配列の要素数を数えられないのでしょうか。
otn

2019/04/16 13:11

数えられますよ。
spu

2019/04/17 00:50 編集

申し訳ないのですが、私の理解が追い付いていないようです。今のソースでは、配列nに数値が入っているのではなく、nを配列宣言したのに.to_fによって配列ではない変数(数値)に上書きしているということでしょうか?
spu

2019/04/17 07:21 編集

上記については解決できました! class Array def mean sum = 0.0 self.each { |x| sum += x } res = sum / self.length return res end end n = [] t = [] File.open("sample.txt") do |inFile| inFile.each do |line| next if /^#/ =~line parts = line.gsub(" ","").split(',') ########################### t = parts[0].to_f→t.push(parts[0].to_f) n = parts[1].to_f→n.push(parts[1].to_f) ########################### f1 = parts[2].to_f end end puts n.length (100..((n.length-1)-100)).each do |i| printf "%10.5f%10d\n", t[i], n[(i-100)..(i+100)].mean end で要素を数えることができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問