R および RjpWiki に関する質問コーナー

注意:新規記事用の入力欄は以下の目次の直後にあります。各記事への追加コメントの入力欄は、各記事の後にあります。質問が長くなる場合は、まず出だしだけ投稿し、次に編集ボタンでそれを修正、追加するのが便利でしょう。

もし新規に質問をされる場合は、効率的にコメントを得るためにも、善意のコメント者の時間を無駄にしないためにも、以下に特にご注意下さい。R のメイリングリストへの投稿記事のガイド も参考になるでしょう。




群散布図(Group Scatter)を作成するパッケージはありますか?

(2004-05-13 (木) 22:15:48)

ここにあるような群散布図(Group Scatter)を作成するパッケージはありませんか。

> library(ade4)
> data(lascaux) 
> scatter(dudi.acm(lascaux$ornem, sca = FALSE), csub = 3)
plot-00.png

例えばこんな関数がありました.

> x <- c(0.5,0.2,-0.5,-0.2) ; y <- c(0.2,0.5,-0.2,-0.5)
> eti <- c("toto", "kjbk", "gdgiglgl", "sdfg")
> plot(x, y, xlim = c(-1,1), ylim = c(-1,1))
> scatterutil.eti.circ(x, y, eti, 2.5)
> abline(0, 1, lty = 2) ; abline(0, -1, lty = 2) 

> x <- c(0.5,0.2,-0.5,-0.2) ; y <- c(0.2,0.5,-0.2,-0.5)
> eti <- c("toto", "kjbk", "gdgiglgl", "sdfg")
> plot(x, y, xlim = c(-1,1), ylim = c(-1,1))
> scatterutil.eti(x, y, eti, 1.5)

> plot(runif(10,-3,5), runif(10,-1,1), asp = 1)
> scatterutil.grid(2)
> abline(h = 0, v = 0, lwd = 3) 

> x <- runif(10,0,1) ; y <- rnorm(10) ; z <- rep(1,10)
> plot(x,y) ; scatterutil.star(x, y, z, 0.5)
> plot(x,y) ; scatterutil.star(x, y, z, 1) 

> x <- c(runif(10,0,0.5), runif(10,0.5,1))
> y <- runif(20)
> plot(x, y, asp = 1) # asp=1 is essential to have perpendicular axes
> scatterutil.ellipse(x, y, rep(c(1,0), c(10,10)), cell = 1.5, ax = TRUE)
> scatterutil.ellipse(x, y, rep(c(0,1), c(10,10)), cell = 1.5, ax = TRUE)

> x <- c(runif(100,0,0.75), runif(100,0.25,1))
> y <- c(runif(100,0,0.75), runif(100,0.25,1))
> z <- factor(rep(c(1,2), c(100,100)))
> plot(x, y, pch = rep(c(1,20), c(100,100)))
> scatterutil.chull(x, y, z, opt = c(0.25,0.50,0.75,1))
> par(mfrow = c(1,1))
plot-01.png

関数が多数あるので全部は調べ切れませんでした.すみません. -- 舟尾 2004-05-13 (木) 22:52:40

graph.png

巡回セールスマン問題

(2004-05-06 (木) 17:15:50)

巡回セールスマン問題用の関数がRのあるパッケージにあったようですが失念してしまいました。どなたか、ご存知ありませんか?

matplotの軸

さち (2004-05-03 (月) 00:00:58)

matplotで軸の正の方向を左向きにしたいと思い、

matplot(c(30,-80),c(50,-50))

のようにしたのですが、グラフにしてみると軸は正の方向が右側のままでした。
matplotで軸の方向を変える方法を知っている方がいたらアドバイスをお願いします。

sines <- outer(1:20, 1:4, function(x, y) sin(x / 20 * pi * y))
matplot(sines, xlim=c(20,1), type="o", pch=1:4, col = rainbow(ncol(sines)))
matplot-00.png

y 軸側も同様にして 引数 ylim で調節してください.-- 舟尾 2004-05-03 (月) 14:35:36

sines <- outer(1:20, 1:4, function(x, y) sin(x / 20 * pi * y))
matplot(sines, pch = 1:4, xlim=c(20,1), ylim=c(1,-1), 
        type = "o", col = rainbow(ncol(sines)))
par(xaxp=c(0,1,5))
par("xaxp")        # xlim は [0 1]

[1] 0 1 5

plot(1:10)         # xlim ( c(xaxp[1],xaxp[2]) ) がこの時点で変更される
par("xaxp")        # xlim は [2 10] に

[1]  2 10  4

par(xaxp=c(0,1,5)) # 自分好みの座標系にする場合はxaxpを設定した後,xlimで指定する
plot(1:10, xlim=c(xaxp[1],xaxp[2]))
par("xaxp")

[1] 0 1 5

余談ですが,par() で設定して (永続的に) 自分好みの座標を設定することは出来る のでしょうか?"usr" や "xaxp" は値がコロコロ変わってしまうので, 仕方なく xlim , ylim で一時的に変更しているのですが.どうも私の使い方が悪い せいか,"usr" や "xaxp" の適当な使い方が思いつきません.-- 舟尾 2004-05-04 (火) 11:14:34

# 原点を通る座標軸を描く
plot(rnorm(30), rnorm(30), axes = F, xlab = "", ylab = "")
axis(1, pos = 0, at = pretty(par("usr")[1:2]), adj = 0)
axis(2, pos = 0, at = pretty(par("usr")[3:4]), las = 2, adj = 1)
box()

[質問]ベクトル

さち (2004-04-30 (金) 05:19:49)

ある変数に値を代入していき、その変数に値をベクトルのように
記憶させていくプログラムを作りたいです。例えば、
x<-1
x<-3
x<-9
x
1 3 9
のようにしたいです。このとき、
x[3]
のように長さを与えれればよいのですが、
いま代入する変数の数がいくつになるのかわからない状態です。
このような時はどうしたらよいのでしょうか?
初歩的な質問ですが、アドバイスなどお願いします。

> x <- numeric(0)  # x <- NULL でもOK (この時点では x は空の変数)
> x
numeric(0)         # この時点では x は空の変数
> x[1] <- 1
> x[2] <- 2
> x[3] <- 3
> x
[1] 1 2 3 
> x[5] <- 5 # 途中飛ばしてもOK
> x
[1]  1  2  3 NA  5  # 未定義の x[4] には自動的に NA 値が代入される

princompのloadingsは固有ベクトルそのもの?

石原茂和 (2004-04-27 (火) 07:42:09)

(すみません,同内容を旧Rwikiの掲示板にまちがえてかいてしまいました)

こんにちは.いま気がついたのですが,princompのloadingsは
固有ベクトルそのものですね.
helpでも

loadings: the matrix of variable loadings (i.e., a matrix whose columns
   contain the eigenvectors). 


と,そのように書いてあります.
しかし,主成分負荷量は,加工していないもとの変数での値と,主成分スコアの相関係数
のはずですが,
確かに固有ベクトルとたいがいの場合,同じような傾向になりますが
固有ベクトルそのものを負荷量というのは誤解のもとでは?

数量化1類で消費されるメモリ量について。

koichi (2004-04-19 (月) 23:48:32)

はじめまして。Rの初心者です。
Rで数量化1類を行おうとしているのですが、メモリの問題で手を焼いています。
具体的には、
1列目(V1)を『0から1までの8桁の乱数』、2列目(V2)を『1から1000までの整数のどれか』としたレコード50000件(テキストファイルで820KB)をd0に読み込み、V2を因子として水準1000の数量化1類を行います。

d0$V2 <- factor(d0$V2)
result <- summary(lm(V1 ~ V2,data = d0))


すると

Error:cannot allocate vector of size 390625 Kb
Reached total allocation of 1022Mb


と出て、タスクマネージャーを見るとRは「応答なし」で止まっています。

このデータ量で390625 Kbもの行列を生成してしまうのでしょうか。それにしても2行目を見ると1022Mbにはまだ余裕があるように思えます…。

メモリ関連の操作や、計算法の工夫を通してなんとか計算させる方法をご存知の方がおられましたら、是非ご教授お願いしたいと思います。

当方の環境はWindowsXP,Pentium4 2.8GHz,1GBRAMです。
よろしくお願いいたします。

.Call/.Externalで使用するDLLの作成方法について

どうむ (2004-04-19 (月) 15:20:39)

現在R(Windows版)から呼び出せるCで書いたDLLを作成中です。環境は
■R1.8.1
■コンパイラー:「Borland C++ Compiler 5.5」
■OS:WindowsXP
です。いままでRやSPlusでCで書いたルーティンを作ってきたのですが、今回はCからRの関数を呼び出すことに初めてチャレンジせねばならず、この点に関してアドバイスをいただけると幸いです。「Writing R Extensions」の第4章には一応目を通しましたが。。。
まず、簡単なCルーティンですが

extern "C" __declspec(dllexport) void R_TEST001(int *x, int *ret);

__declspec(dllexport) void R_TEST001(int x[], int *ret)
{
  *ret = x[0]+x[1]+x[2]+x[3];
}

整数型のベクトルを引数にとってその合計を「ret」で返している簡単な関数です。
DLLを作成するのにMakefileを作っておりコンパイルとリンクは以下のとおりです。

bcc32 -u- -I"***" -O2 /c ***.cpp
ilink32 /w /m /Tpd /L"***?Lib"
    "C:?borland?bcc55?Lib?C0D32.OBJ" ***.obj,
    ***.dll, 
    CW32.LIB IMPORT32.LIB
(mapファイルの指定が欠如していますが気になさらぬよう。。。)

「***.cpp」が該当のCルーティンです。
これを呼び出すRのプログラムは

> dyn.load("***.dll")
> is.loaded("R_TEST001") #確認
[1] TRUE

と、なります。結果は

> ret <- .C("R_TEST001",as.integer(c(1,2,3,4)),ret=integer(1))
> ret$ret
[1] 10

です。
ここまでは、良いのですがRの「.Call」関数を使用できるようにまずヘッダーファイルを加えてみます。

#include <R.h>
#include <Rinternals.h>

extern "C" __declspec(dllexport) void R_TEST001(int *x, int *ret);

__declspec(dllexport) void R_TEST001(int x[], int *ret)
{
  *ret = x[0]+x[1]+x[2]+x[3];
}

たった、これだけで上のコンパイルが通らなくなりました。
が以下のように「-A」オプション(ANSI 準拠の予約語のみを使用する)を加えることでなんとかコンパイルは通るようになりました。

bcc32 -u- -I"***" -O2 -A /c ***.cpp
ilink32 /w /m /Tpd /L"***?Lib" 
    "C:?borland?bcc55?Lib?C0D32.OBJ" ***.obj, ・・・

今度は、「Writing R Extensions」の第4章にあるように関数を書いてみました。

#include <R.h>
#include <Rinternals.h>

extern "C" __declspec(dllexport) void R_TEST001(int *x, int *ret);
extern "C" __declspec(dllexport) SEXP R_TEST003(SEXP x, SEXP ret);

__declspec(dllexport) void R_TEST001(int x[], int *ret)
{
  *ret = x[0]+x[1]+x[2]+x[3];
}
__declspec(dllexport) SEXP R_TEST003(SEXP x, SEXP ret)
{
  int i, j, nx, ny;
  SEXP ans;
  
  nx = length(x);
  PROTECT(ans = allocMatrix(REALSXP, nx, 1));
  UNPROTECT(1);
  return(ans);
}

このようにすると、コンパイルは通るのですがリンクができません。

ilink32 /w /m /Tpd /L"***?Lib" "C:?borland?bcc55?Lib?C0D32.OBJ" ***.obj,
   ***.dll, CW32.LIB IMPORT32.LIB
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル 'Rf_length(SEXPREC *)' が未解決(***.OBJ が参照)
Error: 外部シンボル 'Rf_allocMatrix(unsigned int, int, int)' が未解決(***.OBJ が参照)
Error: 外部シンボル 'Rf_protect(SEXPREC *)' が未解決(***.OBJ が参照)
Error: 外部シンボル 'Rf_unprotect(int)' が未解決(***.OBJ が参照)

** error 2 ** deleting ***.dll

R.DLLから「implib.exe」でR.libを作成してそれを指定しても結果は同じでした。
このようなエラーが出るということは、致命的な間違いを、犯しているのでしょう。が、マニュアルを読んでも良くわかりません。
解決につながるような情報がございましたら、よろしくお願いいたします。

Mac OS X の作図デバイス

舟尾 (2004-04-18 (日) 15:49:17)

R を起動しますと,UNIX では x11 が,Windows では windows が,Mac OS 8/9 では macintosh がそれぞれ自動的に起動します (この情報も古い?) が,Mac OS X でも macintosh が起動するのでしょうか?あと,Linux 系の R でも x11 が起動するのでしょうか?興味本位の質問ですが,お答え頂けたら幸いです.

GLMM()でできるオブジェクトの参照方法

林 (2004-04-14 (水) 13:38:20)

lme4パッケージのGLMM()でできるオブジェクトは
is.list()で調べるとリストなのですが、names()では名前はなく、[[1]]とリストの添え字で参照しようとしても参照できません。str()の出だしは

list()

となります。通常のリストでは

List of 5 

などといくつ要素があるとか返ってくるので、GLMM()でできるオブジェクトはなにか変わっているのでしょうか?

1.9.0がmakeできない

谷村 (2004-04-13 (火) 00:42:16)

VineSeedでR-1.9.0がmakeできません。

making dataentry.d from dataentry.c
making devX11.d from devX11.c
making rotated.d from rotated.c
making rbitmap.d from rbitmap.c
make[4]: ディレクトリ `/home/hoge/tmp/R-1.9.0/src/modules/X11' から  出ます
make[4]: ディレクトリ `/home/hoge/tmp/R-1.9.0/src/modules/X11' に入ります
gcc -I. -I../../../src/include -I../../../src/include  -I/usr/X11R6/include
  -I/usr/local/include -DHAVE_CONFIG_H  -D__NO_MATH_INLINES -mieee-fp -fPIC  
  -g -O2 -c dataentry.c -o  dataentry.lo
In file included from dataentry.c:31:
/usr/X11R6/include/X11/Xlib.h:1400: error: 文法エラー before "_Xconst"
/usr/X11R6/include/X11/Xlib.h:1488: error: 文法エラー before "char"
/usr/X11R6/include/X11/Xlib.h:1516: error: 文法エラー before "_Xconst"
/usr/X11R6/include/X11/Xlib.h:1520: error: 文法エラー before "char"
/usr/X11R6/include/X11/Xlib.h:1542: error: 文法エラー before "_Xconst"
[snip]

誰かVineSeedでmakeに成功している方はいらっしゃいますか?
XはXOrg-6.7.0-0vl2です。

RjpWiki 頁のアーカイブのうまい作り方?

間瀬茂 (2004-04-04 (日) 23:06:46)

例えばこのQ&Aコーナーがかなり長くなってきたので、アーカイブを作り、古いものを移したいのですが、添付画像ファイルが多いとどうしたら一緒に引越ししたら良いのか?いっそ「Q&A(2)」という名前で新しい頁を立てれば簡単ですが、それもかっこ悪い。うまい方法をご存知の方はお教え下さい。そもそも既存の頁の名前をリンク関係を保存したまま変えることはできないのですよね?

SJava

高階知巳 (2004-03-31 (水) 10:56:07)

S/RとJavaのインタフェース SJava を、1年半ほど前に試したときは、動作する環境が非常に限定されている感じで、ちゃんと動作しなかったのですが、最近、どうなっているんだろうと思って omegahat のウェブサイトを見に行こうとしたところ、昨日も今日も繋がらないですね... どなたか、SJavaをうまく使えたという方はいらっしゃいますか?

import org.omegahat.R.Java.*;

public class REvalSample {
   public static void main(String [] args) {
       String [] rargs = {"--slave", "--vanilla"};

       System.out.println("Sample program to call R engine from Java");
       ROmegahatInterpreter interp
           = new ROmegahatInterpreter(ROmegahatInterpreter.fixArgs(rargs),
                                      false);

       REvaluator e = new REvaluator();
       
       Object val = e.eval("x <- sin(seq(0, 2*pi, length=30))");
       val = e.eval("x * 2.0");
            
       if (val != null) {
           double[] objects = (double[])val;
           for (int i=0; i<objects.length; i++) {
               System.err.println("("+i+") " + objects[i]);
           }
       }
   }
}

pairs(data.frm, upper.panel = points, lower.panel = 残差プロット)

みやむら (2004-03-26 (金) 13:42:27)

pairs() の描画のようにして,上三角部分に通常の散布図を,下三角部分に重回帰による残差の散布図を描きたいのですが,適当な方法はあるでしょうか?

help.startができなくなりました。

(2004-03-26 (金) 13:15:11)

help.startでブラウザが起動しなくなりました。どこをチェックしたら良いのか
ご存知の方は教えてもらえないでしょうか?
こんなコメントが出ます。Making links in per-session dir ...If /usr/bin/open is already running, it is *not* restarted, and you must switch to its window. Otherwise, be patient ...
使用ソフトRAqua ver1.8です。

2変量のヒストグラム

sak (2004-03-24 (水) 23:53:51)

2変量のヒストグラムを描く事は可能でしょうか?

[質問]DOSの |more や /p にあたるコマンドは?

inagaki00 (2004-03-23 (火) 22:27:03)

 長ーいデータを見るとき、DOSでは

type hogehoge.txt | more とか

type hogehoge.txt /p のように打ちます(UNIXだとcatですね)
これと同じスイッチがRにはありますでしょうか。

ありそうで見つからないので困っています。
ご存知の方、どうぞよろしくお願い致します。

page(base)                      Invoke a Pager on an R object
ObjecttaskCallbackManager(base) Create an R-level task callback
managergrid.newpage(grid)       Move to a New Page on a Grid 
Devicetkpager(tcltk)            Page file using Tk text widget

ページのヘッダやフッタ描画、またはページの4隅のユーザ座標を得るには?

Я・・R (2004-03-23 (火) 18:38:15)

レイアウト、グラフ、余白設定などに関係なく、ページの特定位置にヘッダやフッタを描画したいのですが、mtext(), title() などでは描画内容や余白設定によって位置が動いてしまいます。
ヘッダやフッタを text(ユーザ座標) で描こうと思ったのですが、4隅の座標を得る方法がわからず、少なくとも par() の usr, plt, fig の値から逆算してもレイアウトによって定まらないことがわかりました。
ところが

box(which="outer", lwd=4, lty=2, col="blue")

とやると必ず正しく4隅を囲むので、どうやって4隅の座標を得るのかを見ようと

?box

としましたがソースコードが見れませんでした。
ヘッダやフッタ描画、またはページの4隅のユーザ座標を得る方法をご存知でしたらよろしくお願いします。

ESSの中の日本語

(2004-03-23 (火) 11:33:40)

gnome-terminal上では

> a <- "日本語"
> a
[1] "日本語"

と日本語が使えますが、ESS上では

ess-20040323.png

という感じになります。gnome-ternimal上では問題がないのでESSの設定で
何とかなればと思っています。ご助言などがございましたらよろしくお願いします。
[環境]
VineLinux2.6
ess-emacs-5.2.0beta1-1vl1
R-1.8.1-4vl1(本家版)

ファイル書き出し時の文字コードの指定方法

matsu (2004-03-18 (木) 19:06:00)

はじめまして、matsuと申します。

早速ですが、write()やwrite.table()でオブジェクトをファイル
に書き出す場合、ファイルの文字コードを制御することはできるの
でしょうか。

私の環境( R ver1.6.1 Win2k )では sjis(改行コードCRLF)で
書き出されるのですが R側の設定でeuc(改行コードLF)に変更
はできるものなのでしょうか。

ポインタ等でもお教えいただければ幸いです。
よろしくお願い致します。

グラフィックウインドウの名前

(2004-03-18 (木) 11:20:43)

windows()などで表示されたウインドウ
に自動的にふられる名称
「R Graphics: Device x」
を変更することは可能でしょうか?

非線形回帰の初期値

ぶんしょ (2004-03-17 (水) 17:40:55)

非線形回帰の初期値がすぐ入らないのですが、いい方法があれば教えてください。 今やっているのが

tpot<-nls(HAV~(a*SI+b)*(1-exp(k*AGE))^m,start=list(a=1,b=-10,k=-0.005,m=1.5),data=plot)

という式です。 見当をつけて初期値を入れれば大体はすぐ当てはまるのですが、かたよりが大きい場合、

Error in numericDeriv(form[[3]], names(ind), env) : 
Missing value or an Infinity produced when evaluating the model

Error in nls(HAV ~ (a * SI + b) * (1 - exp(k * AGE))^m, start = list(a = 0.5,  : 
singular gradient

Error in nls(HAV ~ (a * SI + b) * (1 - exp(k * AGE))^m, start = list(a = -50,  : 
step factor 0.000488281 reduced below `minFactor' of 0.000976563

といったエラー文が出ます。これらの意味もできれば教えてください。

lm()関数の不思議

杉本 (2004-03-17 (水) 16:31:34)

x<-c(8,3,4,2,1,4,8,4,9)
y<-c(4,1,5,1,1,2,5,2,3)

として x=a*y+bの形で線形回帰したいときは

lm(x~y)

ですが x=a*y^2+bの形で線形回帰するときはどうすればよいのでしょうか?

lm(x~y^2)

とすると上と同じ結果になってしまいます。もちろん x=a*y+b*y^2+cの形で線形回帰するときも

lm(x~y+y^2)
Call:
lm(formula = x ~ y + y^2)
Coefficients:
(Intercept) y 
1.586       1.197  

となり、x=a*y+bの形で線形回帰してしまっています。新たにデータとして作り直せばよいのですがlmでなんとかなる方法をご存知でしたら教えていただけないでしょうか。

無題

大熊 大郎 (2004-03-12 (金) 23:58:36)

関数 width.SJ はなんですか?おしえてください。

ヒストグラムを描くhist()

Rin (2004-03-04 (木) 11:57:28)

hist()を使いヒストグラムを描くとき、matrixデータを与えると列データに対し、色分けして描いてくれますが色分けの中身(データのタイトル)はどのようにしたら表示できるのでしょうか?どなたか知っておられる方がおりましたら、教えてください。
よろしくおねがいします。

> data(islands)
> hist(islands)
> legend( 5000,y=30,paste("data",c(1:3)), col = c(1:3), lty=1, merge = TRUE, bg='gray90')
> legend(10000,y=30,paste("data",c(1:3)), col = c(1:3), lty=1, merge = TRUE, bg='gray90')
> legend(10000,y=40,paste("data",c(1:3)), col = c(1:3), lty=1, merge = TRUE, bg='gray90')
hist.png

帯グラフ

(2004-03-02 (火) 12:57:28)

グラフィックス参考実例集には、なぜか帯グラフがありません。帯グラフを描くときは皆さんどうしていらっしゃいますか?barplotをいじらないとだめですか?

Rが動作するOS

(2004-03-01 (月) 18:58:11)

Rの紹介記事にRが動作するOS一覧を載せたいのですがどこかにそういうものはありますか?
現在の把握状況は下記の通りです。

  • MacOS X、Windows、Linux、FreeBSD、NetBSD、OpenBSD、Solaris、AIXでは完全に動作する。
  • 古いMacOSは古いRなら動く?
  • Linux版のザウルスは、制限がありながらも動作する。

    上記以外にRが動作したOSがありますか?
    LindowsやBeOS上でRは動作しますか?超漢字はどうですか?

ESSでのコメント行の色

さとう (2004-02-28 (土) 09:46:19)

Emacs+ESS+Rを利用してます。emacsでRファイルを編集するとき、コメントマーク「#」の数により、その行の色を変更できると便利ですよね。
とりあえずの対処療法として、

M-x hi-lock-mode
M-x highlight-regexp [RET] ### [RET] hi-red-b
M-x highlight-regexp [RET] ## [RET] hi-green-b

などとしてます。(順序が大事)
拡張子がR(またはr)のファイルを開いたときには、いつもこのように色づけするスマートな方法はないものでしょうか?

Rで並列処理計算(グリッド・コンピューティング?)

(2004-02-23 (月) 15:18:03)

 Rで利用できる並列処理のチュートリアルのようなものはあるのでしょうか?

64ビット環境でのRの動作

(2004-02-23 (月) 15:16:40)

 最近、64ビットのPCが盛んに話題になっていますが、Rは32ビットよりも、64ビット上の方がパフォーマンスが段違いのでしょうか?


階級間隔が異なるヒストグラム

さかもと (2004-02-20 (金) 11:30:56)

Rにて階級区間が異なるヒストグラムを作成したいのですが,どうしてもうまくいきません・・・.間隔dに対してある階級からは間隔fにしたいのですが,
(度数)*d(基準とする標準間隔とでも言いますか・・・)/f
を間隔fの高さにすればいいのですが,どうすればRでそれが可能なのでしょうか?
ちなみに,初心者です・・・.

> x <- rnorm(50) # データ
> h <- 0.8
> bins <- seq(min(x)-0.1, max(x)+0.1+h, by=h)
> pointlist <- hist(x, breaks=bins, prob=T, plot=F)$counts
> hist(x, breaks=bins) # 普通にヒストグラムを描く場合(区切り幅はbinに従う)

リストpointlistには,長さ h ごとに区切られた場合の左から数えた度数が入っています.-- 舟尾 2004-02-21 (土) 20:32:00

免疫アルゴリズム

(2004-02-17 (火) 18:01:23)

R や S-plus で免疫アルゴリズム(IA)を扱った例はあるのでしょうか?

ライブラリのバージョン表示

(2004-02-17 (火) 13:16:00)

ライブラリパッケージが最新バージョンかどうかを確認するため、インストール
しているライブラリのバージョンを表示させたいのですが、方法が分かりません。自分なりに検索してみましたが、方法を見つけることができませんでした。

Rmapやmaptoolsでの縮尺バーや方位記号の表示

(2004-02-17 (火) 00:17:51)

Rmapやmaptoolsで表示した地図には縮尺バーや方位記号を入れられないのでしょうか。

plotで縦軸と横軸の単位幅を同じ長さにする方法

(2004-02-16 (月) 19:10:03)

FAQでしたら、削除しください。
x軸とy軸がどちらも単位がm(メートル)であるplotで、x軸の1mとy軸の1mを同じ
長さにしたいのですが、勝手に調整されてそろいません。x軸とy軸の単位長を
同じにする方法はありませんか。

plot(runif(10), 2*runif(10),xlim=c(0,2),ylim=c(0,2))
plot(2*runif(10), runif(10,min=0,max=.1),xlim=c(0,2),ylim=c(0,2))

比例定数 3/6 というのは本質的ではなく、実際の画面を見て適当な比率を試行錯誤するというのが現在思いつく解決策です。なお fin パラメータの既定値は fin=c(6.990803, 6.997416) でこれより大きなサイズは指定でき無いようです。par(fin=c(6,3)) を実行する際は

oldpar <- par(no.readonly = TRUE) # 現在のグラフィックスパラメータ退避
... 作業 ...
par(oldpar) # パラメータ復帰

を実行しないと後で困るかも知れません。

#ref(): The style ref(filename,pagename) is ambiguous and become obsolete. Please try ref(pagename/filename)

 > par(fin=c(6,4))  # グラフィックス画面を 6x4 インチに指定
> par(plt=c(0.1,0.9,0.1,0.9)) # 作図領域をグラフィックス画面への割合で指定
> Xlim <- 10*par()$fin[1]*c(0, par()$plt[2]-par()$plt[1])
> Ylim <- 10*par()$fin[2]*c(0, par()$plt[4]-par()$plt[3])
> plot(1:20,1:20, xlim=Xlim, ylim=Ylim)

#ref(): The style ref(filename,pagename) is ambiguous and become obsolete. Please try ref(pagename/filename)

参考までにメモすれば plt, fin の既定値は次のようになっています。

 > par()$plt
[1] 0.1172537 0.9399432 0.1457143 0.8828571
> par()$fin
[1] 6.990803 6.997416

従って既定値での作図画面のサイズはインチ単位でそれぞれ 5.751261, 5.158095 です。

正準相関分析での第 i 正準変量の求め方

(2004-02-14 (土) 20:55:31)

library(mva)の関数cancor()を用いれば正準相関係数行列が得られますが、
第 i 正準変量を求める場合はどうすればよいのでしょう?例えば このような分析 を R で行いたいのです.
(exampleでは x %*% xcoef と計算していますが何か違う気がして・・・)


latex形式のヘルプファイルの見方

(2004-02-06 (金) 23:25:05)

libraryごとにhtmlやhelpなどヘルプ文書がありますが、latex配下にあるTeX文書は、documentclassもなくいきなり?Headerで始まっていますが、これはどうすればコンパイルできるのでしょう。helpやhtmlでは数式に難があるので、できればxdviなどでヘルプを読んでみたいです。

文字列のオブジェクトへの変換方法 (なんでも掲示版より移動)

sakamoto (2004-01-30 (金) 19:35:15)

まずは次のプログラムを見てください。

money<-1:10
>a<-readline()
money
>money[a>5]
 [1]  1  2  3  4  5  6  7  8  9 10
> a<-as.name(a)
> a
money
> money[a>5]
 [1]  1  2  3  4  5  6  7  8  9 10

ここでしたい事は、以下の事である。

>money[a>5]
[1]  6  7  8  9 10

つまり、文字列として取り込んだものをオブジェクトとして扱いたい。いろいろ探してみたのですが、見つかりませんでした。どなたか教えてもらえないでしょうか?

> a <- runif(10)     # a という名前の数値ベクトルを作る 
> a           
 [1] 0.6313190 0.4538556 0.3934363 0.4643964 0.3375608 0.3453617 0.3785413
> aa <- readline()   # その名前をコンマンドラインから入力
a                    # 名前は a
> aa
[1] "a"              # aa は文字列 "a"
> get(aa)            # aa という文字列を名前に持つオブジェクトの値を得る
 [1] 0.6313190 0.4538556 0.3934363 0.4643964 0.3375608 0.3453617 0.3785413

まとめてみると

> a <- runif(10)
> b <- runif(10)
> x <- 1:10
> x[get(readline())<0.5]
a                          # コンマンドラインから a を入力    
[1]  3  4  5  6 10         # x[a<0.5] が得られた
> x[get(readline())<0.5]  
b                          # コマンドラインから b を入力 
[1] 1 3 4 5 6 7 8          # x[b<0.5] が得られた
> a 
[1] 0.557755694 0.756125389 0.062838319 0.116221907 0.287878570 0.490844365 
> y <- readline()
a
> y
[1] "a"
> eval(parse(text=y)) # 文字列 y をオブジェクト名 a に変換し評価した 
[1] 0.557755694 0.756125389 0.062838319 0.116221907 0.287878570 0.490844365

hist()の引数breaksの決め方

(2004-01-29 (木) 17:57:01)

ヒストグラムを描くhist()の引数のbreaks=seq(min,max,by=bin)の minとmaxはどういった基準で決めればよいのでしょう?

ベクトルと行列

Soichi (2004-01-29 (木) 05:39:56)

Matlabから乗り換えようかとRを試し始めました。
ベクトルと行列のどちらも引数として受け取ることができ、
行列を受け取ったときは各列に処理を、
ベクトルを受け取ったときは(n,1)行列に変換した上で、その後の処理を行いたいのですが、
Rでそのようなことは可能でしょうか。

R の sleep() 機能

φ(oo-)o (2004-01-28 (水) 09:11:25)

このサイトの「R プログラミング Tips 大全」のページで

指定秒数プログラムをアイドリングする関数
は標準関数の Sys.sleep(sec) ではどうでしょうか。ヘルプには

This function may not be implemented on all systems.
と書かれていますが、Windows2000では動くようです。
(R 1.8.1を使用しています)

作ったページの削除は?

mnyu (2004-01-23 (金) 01:08:50)

作ったページの削除は どうしますか

非線形には対応していますか

tia (2004-01-22 (木) 17:22:56)

Rに関してまったくの初心者です.
Rで非線形問題を解くことは可能でしょうか.
ご教授いただければ幸いです.

CCDFについて。

sato (2004-01-22 (木) 14:24:52)

Rを使って、1‐累積密度分布であるCCDFを描きたいのですが、パッケージ等では用意されていないのでしょうか?
またもしない場合は、パッケージstepfunの中のecdfを使って描く必要があるのでしょうか?

Rでビット演算

(2004-01-19 (月) 16:29:43)

Rでビット演算をするには、どうすれば、良いのでしょう

直線回帰の信頼区間について

ぶんしょ (2004-01-18 (日) 20:38:47)

直線回帰の95%信頼区間をRで計算したいのですがどうしたらよいでしょうか?

スレッド表示

(2004-01-13 (火) 21:19:06)

Q & Aではできないのでしょうか?

[質問] lm() 関数の返り値のF統計量のp-value <= なんでも掲示板から移動

舟尾 (2004-01-10 (土) 21:12:33)

lm()関数で重回帰分析を行った際,

result <- summary(lm(y~x))

として result[[k]] や result$names (k:整数,names:名前)
をすることで推定値やt値などが取り出せますが,F-statistics
のp-valueだけがどうやっても取り出せません.names()で調べても
F-statisticsのp-valueにあたるものが見当たらないのですが,
この件に関して情報をお持ちの方,レス頂ければ幸いです.

間瀬 2004-01-10 (土) 22:52:45
たしかに summary.lm 関数は F 統計量の p 値自体は計算しないようですね。次のようにすれば計算可能ですが、summary.lm が表示する p 値はいつの時点で計算されるのか?

> x=1:10 
> y=c(rnorm(5),rnorm(5,mean=1)) 
> z=summary(lm(y~x)) 
> w=z$fstatistic 
> pf(w[1], w[2], w[3], lower.tail=FALSE)     
      value 
0.1643454  

中澤 2004-1-12(月)11:42:00
print.summary.lmの中のようです。プロンプトでprint.summary.lmと打てば,

if (!is.null(x$fstatistic)) {
       cat("Multiple R-Squared:", formatC(x$r.squared, digits = digits))
       cat(",  Adjusted R-squared:", formatC(x$adj.r.squared, 
           digits = digits), "?nF-statistic:", formatC(x$fstatistic[1], 
           digits = digits), "on", x$fstatistic[2], "and", x$fstatistic[3], 
           "DF,  p-value:", format.pval(pf(x$fstatistic[1], 
               x$fstatistic[2], x$fstatistic[3], lower.tail = FALSE), 
               digits = digits), "?n")
   }

となっているのがわかります。

ファイルが読み込めません

haru (2004-01-09 (金) 14:52:09)

初心者なのですが、R1.8.1をダウンロードして早速Excelでデータを入力し、customernumberという名前でテキスト形式で保存。Rで読み込もうと思って

customernumber <- read.table("costomernumber.txt")
としましたが
Error in file(file, "r") : unable to open connection
In addition: Warning message:
cannot open file `costomertable.txt'
というエラーメッセージがでてしまい読み込むことができません…。
read.delimなども使ってみましたが同じ結果でした。
http://phi.ypu.jp/swtips/Data2R.htmlに書いてある説明通りにやったはずなのですが
Rに関する質問なのかもよくわかりませんが、よろしくお願いします。

R初心者

文字の読み込み (2003-12-16 (火) 01:33:52)

文字列(例えば3030A6-0010など)の入ったファイルから各々の文字列を読み込みたいのですが、scan()関数を使ってcdata <- scan("worldstnid.dat")??
stnid <- cdataとしても、Error in scan("worldstnid.dat") : "scan" expected a real, got "3030A6-0010"と、怒られてしまいます。どうもscan()関数は数値データにしか対応しいないように思えて仕方ないのですがそうなのでしょうか?また、このような文字列を読み込む関数がほかにあるのであれば教えていただきたいです。よろしくお願いします。

macでRのproxy設定

mac (2003-12-14 (日) 05:55:22)

OSXのパンサーを使っています。
Rでproxyを利用したいのですが、どうすればいいのでしょうか。
教えてください。

同時実行

(2003-12-12 (金) 16:58:27)

Windows用のRを2つ立ち上げて、
それぞれを操作した場合に、
それぞれの実行結果は完全に独立だと思ってよいのでしょうか?

グラフがかけない X11 is not available

TAKU (2003-12-12 (金) 11:33:19)

超初心者で、はじめてLinuxをインストールし、Rをemacs上で立ち上げる
とこまでできたのですが、postscript以外のグラフィックコマンドが
使えないのです。png("hoge")やx11()どを入力すると
X11 is not available
とエラーメッセージがでてしまいます。Rの質問ではないのかもしれませんが、
助け舟をよろしくお願いします。
ディストリビューションはdebianです。

Rプログラミングで得られた結果を別のファイルへ出力するには?

ぽいと (2003-12-11 (木) 18:21:16)

現在、R言語でプログラムを書いたのはいいのですが、その結果(様々な数値)を別のファイルへ格納したいのですが、その方法が分かりません。扱っているデータが膨大な上、outputも多いのでいちいちコピー&ペーストと言うわけにもいきません。どなたか知っておられる方がおりましたら、教えてください。よろしくおねがいします。

Rパッケージのインストール&ロード方法

R初心者 (2003-12-11 (木) 16:03:04)

現在Linux上でパッケージ「evd」をinstall.package("evd")で確かにインストールしたのですが、search()でインストールされているパッケージ情報を参照しても、インストールされているとの表示がでません。またWindows版のRではLoad Packagesで簡単にロードできたのですが、Linux上ではそのロード方法が分かりません。どなたかご存知の方がおられましたら、ご教授願います。

大規模データからランダムにデータをサンプリングする

msasalo (2003-12-10 (水) 21:48:07)

はじめまして。最近Rを使いはじめるようになった者です。
200万件38Mbのデータを処理しようと思っていたのですが、読み込みできず、あきらめました。
そこで、データのサブセットを作って36万件6Mbのデータを作ったのですが、読み込みはできたものの、Strip spot anovaができません・・・・。1way-anovaが何とかできる程度です。
マシンのスペックは、P4-1.6GHz,512Mで、ページングメモリーは4G確保しました。実行すると15分ほどで、CPU使用率は100%、ページングファイルは0.8Gとなり、12時間経過すると、1.3G程度となり・・・何も変わりません・・・1週間待つべきでしょうか・・・。
データファイルを元にランダムにとる方法がRにあるとありがたいのですが・・・。どなたか、お手すきの方がいらっしゃいましたらアドバイスお願いします。

[質問]2変量t乱数の作り方

(2003-12-10 (水) 16:59:27)

2変量乱数の発生でt乱数の作り方を教えて下さい。

  • CRAN にあるアドオンパッケージ mvtnorm は多変量の正規分布とT分布用のパッケージのようです。-- 2003-12-10 (水) 20:33:13

アルゴリズムを書く代わりに命題みたいなものを示します。

拡張性があるように2変量ではなく3変量楕円t乱数に従う乱数を生成する関数を以下に定義します(2変量の場合は met3 中のfor文の中身をいじって下さい)。

met3 <- function(m, mu, V, n) {
  # m  : 自由度
  # mu : 平均ベクトル
  # V  : 散らばり行列
  # n  : 乱数の個数
  U  <- svd(V)$u
  V1 <- svd(V)$v
  D  <- diag(sqrt(svd(V)$d))
  B  <- U %*% D %% t(V1)
  
  w <- c()
  for (i in 1:n) {
    R <- 0
    for (j in 1:m) {
      R <- R + rnorm(1)^2
    }
    w <- append(w, list(mu + B %*% (cbind(rnorm(3))*sqrt(m/R)))) 
  }
  return(w)
}
# 実行例
mu <- cbind(c(1,1,1))
V  <- array(c(2,1,1,1,2,1,1,1,2), dim=c(3,3))
n  <- 1000
w  <- met3(5, mu, V, n)
sm <- 0
for (i in 1:n) { sm <- sm + w[[i]] }
sm <- sm/n
sv <- 0
for (i in 1:n) { sv <- sv + (w[[i]]-sm) %*% t(w[[i]]-sm) }
sv <- sv/n

この分布の平均ベクトルはμ、分散共分散行列はm/(m-2)*V(m>2)なので、 多変量楕円t乱数がうまく出来ているかどうかはこれで確かめることが出来ます。-- 舟尾 2004-01-16 (金) 23:08:24

[質問]hist()関数とnclass()関数の関係

(2003-12-06 (土) 11:09:38)

どちらの関数でもSturgesの方法によって階級が求められるようですが、nclass.Sturges()は、hist()による出力結果ではどの部分になるのでしょうか?

ということでしょうか。 -- 2003-12-06 (土) 17:00:57

x<-rnorm(80,mean=0,sd=1)
s<-nclass.Sturges(x)
b<-length(hist.default(x,breaks = "Sturges")$breaks)
s;b
> test <- function(x)  {c(nclass.Sturges(x),nclass.scott(x),nclass.FD(x),
+                                   length(hist(x)$breaks),length(hist.default(x)$breaks))}
> test(rnorm(1000))
[1] 11 21 26 16 16
> test(runif(1000))
[1] 11 10 10 11 11
> test(rnorm(1000))
[1] 11 19 25 15 15
> test(rexp(1000))
[1] 11 20 32 15 15
> test(rcauchy(1000))
[1]   11  109 3057   13   13  # ずいぶんと違うもんですね!グラフでは br="scott" が一番まし

R(D)COMの使い方

f (2003-12-06 (土) 00:37:19)

R(D)COMを使って、VC++で作ったプログラムにRを組み込みたいのですが、上手く出来ません。パスの設定はしたのですが・・。
R(D)COMをお使いの方がおられましたら、使用法等、ご助言お願いいたします。

[質問]条件分岐

さかい (2003-12-04 (木) 18:59:26)

i<500のときx=1、500<=i<1000のときy=1、
それ以外のときz=1とするプログラムを作成したかったので、
以下のようなプログラムを作成したのですが、
iが1000以上のときx=0,y=1,Z=0となり、うまく値を返してくれませんでした。
どのようにしたら解決できるのか分かる方がいたらアドバイスをお願いします。

以下のプログラムはRプログラミングTips大全集の条件実行 if , if elseを参考にして作成しました。

#プログラム
x <- 0
y <- 0
z <- 0
i <- 2000
if (i < 500) {x <- 1}  else if (500 <= i < 1000) {y <- 1}  else z <- 1
#結果
> x
[1] 0
> y
[1] 1
> z
[1] 0
x <- ifelse(i < 500, 1, 0)
y <- ifelse(i < 1000, 1, 0)
z <- ifelse(i >= 1000, 1, 0)

ついでですが、今チェックをしていて気づきましたが R 1.8 からは暗黙のリスト返り値 return(x,y,z) が非難されるようになったのですね。便利だと思うのですが。

> test <- function(x,y) return(x,y)
> test(1,2)
$x
[1] 1
$y
[1] 2
Warning message:
multi-argument returns are deprecated in: return(x, y)

Rdbi RdbiPgSQL

なかま (2003-12-04 (木) 10:42:45)

http://www.bioconductor.org/ のが 1.0.2 で cran.r-project.org の contrib/Devel のは RPgSQL_1.0-0.tar.gz http://sourceforge.net/projects/rdbi/ のは 0.1.2 とすると、
bioconductor のが最新?

[質問]棒グラフで対数軸

(2003-11-29 (土) 17:20:27)

棒グラフを作図するのには barplot(1:10) のようにすれば良いとわかりました。
そこで、Y 軸を対数軸として作図しようと log="Y" を指定したところ以下のようなエラーとなりました。

barplot(1:10, log="y")
Error in plot.window(xlim, ylim, log = "", ...) :
formal argument "log" matched by multiple actual arguments
対数軸の棒グラフはどのように指示すれば描くことが出来るのでしょうか?
よろしくお願いします。

subsetで値を取り除く

detour (2003-11-28 (金) 14:49:55)

subsetで名義変数の特定の値を除いたサブセットを作成したとき、例えば、
a<-data.frame(choice=c("ab","ab","ab","c","c","d","d","d"))
summary(a)
summary(subset(a,choice!="c"))
"c"というのが一応残っているようです。これはどうやったら消せるのでしょうか。初心者ですが、よろしくお願いいたします。

Rのインストール方法(UNIX)

R初心者 (2003-11-28 (金) 14:21:53)

ただいまRをUNIXにインストールしようとしています。R-1.8.1のソースをダウンロードしてきて解凍し、./configureは成功したのですが、makeができません。以下のような感じで怒られます。

make
Make: Cannot open /share/make/vars.mk. Stop.
vars.mkファイルは確かに/share/make/に存在しましたし、原因が分かりません。どなたか解決方法をご存知でしたらご教授下さい。お願いいたします。


添付ファイル: filematplot-00.png 3284件 [詳細] fileasp.png 1781件 [詳細] filehist.png 3356件 [詳細] fileobi2.png 3243件 [詳細] filefinplt.jpg 1867件 [詳細] filegraph.png 3333件 [詳細] fileobigraph.jpg 3456件 [詳細] fileobi.png 3264件 [詳細] filepar.fin.jpg 1799件 [詳細] fileess-20040323.png 1217件 [詳細] fileplot-01.png 3301件 [詳細] fileplot-00.png 3520件 [詳細] fileobi3.png 3322件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-03-25 (土) 11:19:16