![]() |
トップページ > 情報 | |||
スポンサーサイト
新しい記事を書く事で広告が消せます。
データフレームの型名を調べる
統計解析ソフトRにおいて,データフレームの型名を調べるには『class()』関数を利用します。例えば,datと言うデータフレームを作成した場合,『class(dat[,1])』とすれば,1列目の変数の型名が出力されます。しかし,この方法では1変数ずつしかチェックできませんので,結構不便です。そこで以下のようなzoku()関数を作成しました。
zoku <- function(dat){
n <- ncol(dat)
データ型 <- vector(mode="character", length=n)
変数名 <- names(dat)
for(i in 1:n){
データ型[i] <- class(dat[,i])
}
data.frame(変数名, データ型)
}
試しにこの関数を実行してみます。ここではフィッシャーのirisというデータフレームを使用してみましょう。このデータは以下のようなものです。
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
これをzoku()関数に読み込ませると以下のようになります。
> zoku(iris)
変数名 データ型
1 Sepal.Length numeric
2 Sepal.Width numeric
3 Petal.Length numeric
4 Petal.Width numeric
5 Species factor
ただ同じ事はfor文を使わずに,sapply()関数を使っても可能です。
> sapply(iris, class)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
"numeric" "numeric" "numeric" "numeric" "factor"
本来的にはこちらの方が『正しい』のかもしれません。
Rで作図 ~日本語保存~
統計解析ソフトRのplot関数などを使って作図したとき、その図を保存するには「ファイル」メニューから「別名で保存」→「Jpeg」などを選択すると思います。しかし、その図をTeXなどで利用するときはEPSファイルにしなければならないので、ファイルメニューの「Postscript」を選択することになります。しかし、図中に日本語が入っていると、このまま保存したら文字化けを起こしてしまい、よろしくありません。
グーグルで検索をかけても、何かやたら複雑な方法しか見つからず、とても面倒です。そこで、僕が最も簡単だと思う方法を以下に書いておきます。まずRのコマンド画面の方で以下のスクリプトを実行します。
ps.options(family="Japan1")
これだけで終了です。後は通常通り、作図ウィンドウの「ファイル」メニューから「別名で保存」→「Postscript」を選択して、保存します。このときEPSで保存するのではなく、PSファイルとして保存することに注意して下さい。この方法で保存すれば、日本語も文字化けしません。
そして、そのPSファイルをGSViewで開き、「File」メニューから「PS to EPS」を選択して変換すれば、キレイなEPS画像ファイルとして作成できます。いろいろ試しましたが、これが最も簡単な方法だと思います。もしよければお試し下さい。
javaのパスが通らない!
ある本を読んでいて,Javaを使う必要が出てきました。そういうわけでJDKのダウンロードサイトから最新版をダウンロードしてきてインストールしました。
で,例によってシステムの環境変数に『C:\Program Files\Java\jdk1.6.0_20\bin
』のようにパスを通したのですが,なぜかJavacが使えません・・・本を見返して,幾度もチェックしたのですが,どうしてもエラーが出てしまいます。
ちなみに環境は32bit版のWindows7です。で,最終的にわかったのですが,どうやらパスの最後のフォルダ部分に『\』をつけなければいけないようです。つまり以下のように設定してやります。
C:\Program Files\Java\jdk1.6.0_20\bin\;
これって常識なんですかねぇ?時間をかなり無駄にしてしまいました。
ニュートン法で1変数関数を最適化
今週の勉強会はニュートン法についてでした。これは誰もが知っている基本中の基本のアルゴリズムの中で,汎用性がかなり高いものですね。とは言え,アルゴリズム自体はすでに知っていることなので,勉強会はすぐに終わってしまいました。と,言うわけで,今回もC++で書いたコードを載せておきます。
/*****************************************
ニュートン法(1変量)
f(x) = x^3 - 6x^2 + 9x - 3
f'(x) = 3x^2 - 12x + 9
f''(x) = 6x - 12
解答
x = 1のとき,極大値 1
x = 3のとき,極小値 -3
*****************************************/
#include <iostream>
#include <cmath>
using namespace std;
double func( double x )
{
return x*x*x - 6*x*x + 9*x - 3;
}
double dfdx( double x )
{
return 3*x*x - 12*x + 9;
}
double dfdx2( double x)
{
return 6*x - 12;
}
double newton( double x )
{
double df, ddf, xprev;
double delta = 1.e-6;
int limit = 100;
int n = 0;
do {
n++;
df = dfdx( x );
ddf = dfdx2( x );
xprev = x;
x -= df/ddf;
cout << "n = " << n << ", x = " << x << ", f(x) = " << func(x) << endl;
} while( fabs(x - xprev) >= delta && n <= limit );
return x;
}
int main()
{
double a, x; ;
cout << "f(x) = x^3-6x^2+9x-3 を最適化します" << endl;
cout << "初期値を入力してください: ";
cin >> a;
cout << "\n初期値" << a << "で計算を開始します。" << endl;
cout << "-----------------------------------" << endl;
x = newton( a );
cout << "\n計算が終了しました。" << endl;
cout << "x = " << x << "のとき,極値は" << func(x) << "です。" << endl;
return 0;
}
続きを読む »
liboctave利用時のコンパイル
C++で数値計算をする場合,何らかのライブラリを利用することになるのですが,僕の最近のお気に入りは『liboctave』です。使い始めて間もないので,まだ何ともいえませんが,フリーではなかなか強力なライブラリで,これ1つで大抵のことはできそうな感じです。計算速度もatlasと組み合わせることで高速化されますし,boostなどと合わせて使えば言うことなしですね。
ただ,ターミナルでコンパイルするのが非常に面倒です,,,と,思っていたのですが,簡単な方法がありました。忘れやすいので,ここにメモしておきます。
mkoctfile --link-stand-alone -o calc calc.cpp
またご愛読ありがとうございます。
第三作もご期待に添えるといいのですが(^_^)
どうぞお楽しみに!結城浩javaのパスが通らない!困っていますこんにちは。私も 7 を使っていてjavaを使いたくパス設定をしたいのですが、うまくいきません。バックスラッシュを入力したいのですが、環境変数に入力しようとすると入なまjavaのパスが通らない!Re: 困っています> バックスラッシュを入力したいのですが、環境変数に入力しようとすると入りません。
日本語版のWindowsだと,バックスラッシュではなく円記号(¥ ←これの半角管理者