第3回演習に対する質問やコメントに答えて

レポートに対する注意

実行画面のコピーをそのまま提出する者がいるが、これは駄目(不可に近い評価)。 解説を必ずつけること。「確認しよう」というような課題であれば、 どのように「確認したのか、その結果はどうだったのか」をしっかり書こう。 (実験レポートで学習したはずですよね?) エラーが出ていた場合は、必ず原因を調べ(考え)、解決してみてください。 どうしても解決しない場合は、「質問」としてください。

講義全般

授業中に行う課題の時間がもう少し欲しいと思いました。 また、講義の最後の方が急ぎ足になって理解しにくかったです。 回答: 前回の反省によってゆっくりやったつもりですが、 もっとゆっくり(演習時間をたくさん作れるよう)努力しましょう。

ディレクトリの変更について

第三回では、データの入力、出力、またデータの保存について学んだ。 データを参照する際に、ディレクトリを参照する場所を変えないと、データ を参照する事ができなく、毎回毎回変更するのが大変だと思いました。 回答: 『毎回』する必要はありません。データを記憶しておくフォルダ(ディレクトリ) を特定の場所にしておけば、いつもそこを使うようにすればよいのです。 また、ファイルのread.csv関数などで名前を指定するときに、フォルダ名をつ けて(パスと言います)指定すれば、ディレクトリの変更は不要です。

課題2

課題2で行った、save関数を使って書き込むときにファイルを作成して、ディ レクトリの変更を行ってあるのにファイルが見つからないのはなぜですか。 ButuriSave.dataのファイルを作り、ディレクトリの変更も対象のファイルが 保存されているものに切り替えたのですが、ButuriSaved.dataのファイルが見 つかりませんでした。 save(Buturi="ButuriSaved.data") save(Buturi = "ButuriSaved.data") でエラー: 'ButuriSaved.data' を見付けることができません。 回答: これはsave関数に与えるパラメタ(引数)の指定が間違っていたからです。 講義ページには例として
save(x,y,inData,Seiseki,file="save.data")# x, y, inData, Seisekiをsave.dataファイルに保存
をあげました。コメントにあるように、saveの最初の引数は、記憶すべき変数 の並び、そして最後にfile="ファイル名" を書きます。したがって、あなたの場合、
save(Buturi, file="ButuriSaved.data")
と書くべきでした。

課題3-1

デモを実行すると、画面が固まって実行できなかった。 回答: 計算機のパワー(CPU性能とメモリの容量)によります。 演習室のPCでもそうでしたか?

演習問題について

今回、演習問題を行ったが、データの取り扱い時にカンマをつける必要があま りよくわからなかった 回答: 具体的にどこか書いてくれると答えられます。 基本的に、カンマは必要です。不要なカンマを付けると、大抵の場合エラーになります。

演習問題3-1

接線のy=-4x-4が定義されずに図に書き込むことが出来なかった。 回答: 答案では次のようになっていました:
> func<-function(x){x^3+x^2-4*x-4}
> curve(func(x),-3,3)
> abline(h=0,lty=2)
> abline(v=0,lty=2)

> y=-4x-4
エラー:  想定外のシンボルです  in "y=-4x"    
func関数の表示まではよいのですが、y=-4x-4 がいけません。 これは接線の式を「数学的に」表すものですが、Rのコマンドではありません。 演習問題3-1には次のように書いてあります: 式が定数a,bを用いて y=bx+aと表されるとすると、 このグラフは(またもや)abline(a,b)で表示される。 これによれば、あなたが書くべきは abline(-4,-4)でした。

演習問題3-1

エラーが多くなってできなくなった。 回答: 答案では次のようになっていました:
> func<-function(x){
  x^3+x^2-4*x-4}

> curve(func,-3,3)
> abline(h=0,lty=2)
   以下にエラー int_abline(a = a, b = b, h = h, v = v, untf = untf,
  ...) :
  plot.new has not been called yet
>  abline(v=0,lty=2)
   以下にエラー int_abline(a = a, b = b, h = h, v = v, untf = untf,
  ...) :
  plot.new has not been called yet
>  bibun <-function(x){
	     + 3*(x^2)+2^x-4}
> func(0)
    [1] -4
>  bibun(0)
    [1] -3
> sessen <- function(x){
     -4*x-4}
> a <- -4
> b <- -4
> abline(a,b,col="blue")
    以下にエラー int_abline(a = a, b = b, h = h, v = v, untf =
  untf, ...) :
	  plot.new has not been called yet
> data <- read.csv("heightweight.csv")
      以下にエラー file(file, "rt") :  コネクションを開くことができません

> data
...
原因は、エラーが出ているのに、無視して先を続けようとしたことです。 これは一行一行書いているとは言え「プログラム」なので、先のことが しっかり動いていないと、次を動かすことはできません。 おそらくあなたは curve関数で描いたグラフを閉じてしまってから abline 関数を実行したのではないでしょうか? エラーをみると plot.new has not been called yet とあります。これは「plot (curve関数も含む)が呼ばれていませんよ」という 意味です。 解決策は、cureve関数で描いたグラフを「閉じずに」ablineを実行する、 というものでした。 ところで、最後の data 変数にheightweight.csvファイルからの値を記憶させ ようとしていましたが、日本語のエラーメッセージにあるように、 このファイルが見つからなかったため、dataには値を記憶できなかったようです。 このことがそれ以降のエラーにつながっています。

演習問題3-2

演習3-2(3)(4)のグラフが実行されなかった。 どこが違うのかわからないです。 回答: 答案では次のようになっていました:
> male <- data[data$sex=="M",]
> female <- data[data$sex=="F",]
> x <- male$weight
> y <- male$height
> plot(x,y,col="blue")

> a <- female$weight
> b <- female$height
> plot(x,y,col="blue")
> par(new=T)
> plot(a,b,col="red")
maleにもfemaleにも適切な値が入っているので(従ってx,y,a,bにも) 問題は見つかりませんでした。ひょっとしてグラフが隠れて表示されていた、 ということはないでしょうか?

演習問題3-2

(7) (6)までだと縦・横の軸ラボが微妙に重なっている状態であった。よって、そ れぞれの軸ラボを重ねる工夫をした。以下がそのコードである。
> plot(male$weight,male$height,xlim=c(0,80),ylim=c(80,180),xlab="Weight",ylab="Height",col=rgb(0,0,1))
> par(new=T)
> plot(female$weight,female$height,xlim=c(0,80),ylim=c(80,180),xlab="Weight",ylab="Height",pch="*",col=rgb(1,0,0))
Good Job!

演習問題3-2

(7) 点の位置でおおよその曲線が引けると思うが、正確な線を引いたほうがわかり やすいと思うため、近似線の式を加えることが重要ではないかと考えた。 回答: 後の講義で学びますが、lm関数により回帰分析ができます (最小二乗法による1次関数が求まる)。 まず、maleとfemaleのグラフを書いてから、
lineF = lm(female$height~female$weight)
lineM = lm(male$height~male$weight)
abline(lineM,col="blue")
abline(lineF,col="red")
を実行してみてください。