初心者のための R および RjpWiki に関する質問コーナー
新規投稿はできません
TAG (2007-06-27 (水) 21:50:40)
使用環境:R version 2.5.0 (2007-04-23), i386-apple-darwin8.9.1 です。
凡例として
「1 ミュー g/2 ミュー g/3 ミュー g」
のように数字と数式(ギリシャ文字)を混ぜて書きたいと思いcols <- rainbow(3) plot(sin, xlim = c(0, pi), ylim = c(-1, 1), ann=F, col=cols[1]) a <- NULL b <- NULL a <- expression(paste(1, mu, "g")) b <- c(b, a) a <- expression(paste(2, mu, "g")) b <- c(b, a) a <- expression(paste(3, mu , "g")) b <- c(b, a) legend(0.3, -0.2, b, col = cols, lwd=1)上のようにコードを書いてみたのですが(プロットの部分はダミーです)
面倒なので凡例に関する部分をa <- NULL b <- NULL for(i in 1:3) { a <- expression(paste(i, mu, "g")) b <- c(b, a) } legend(0.3, -0.2, b, col = cols, lwd=1)とすると、「iミューg/iミューg/iミューg」のように変数iが変数として認識されません。
paste関数の中なので当然なのかもしれませんが何か良い方法はないでしょうか?~
RjpWiki内のグラフィックス参考実例集:数式のプロットの例2に
「数式と数値変数の結合」とあるので参考にしてexpressionの代わりにsubstituteを使ってみたのですがa <- NULL b <- NULL for(i in 1:3) { a <- substitute(paste(x, mu, "g"), list(x=i)) b <- c(b, a) } legend(0.3, -0.2, b, col = cols, lwd=1)このようにすると「paste(1, mu, "g")/paste(2, mu, "g")/paste(3, mu, "g")」となり、
数値変数は反映されたのですがその他が駄目になるという結果になってしまいました。
解決策はあるのでしょうか?
どなたか対策をご存知でしたらご教授願えますでしょうか。
cols <- rainbow(3) plot(sin, xlim = c(0, pi), ylim = c(-1, 1), ann=F, col=cols[1]) b <- paste(1:3, "μg") legend(0.3, -0.2, b, col = cols, lwd=1)
HPC (2007-06-27 (水) 00:31:04)
Condor というPCクラスター上での Rの動作例ってありますか?
su (2007-06-25 (月) 13:34:43)
使用環境:R version 2.5.0 (2007-04-23) i386-apple-darwin8.9.1
NAを含む行列xyで行xと行yとの間の市街距離を計算しました。x = c(1,1,NA) y = c(1,2,NA) xy = rbind(x,y) dist(xy[,-3], method="manhattan") # 3列目を除いた距離は、1 dist(xy[,3], method="manhattan") # 3列目だけの距離は、NA dist(xy, method="manhattan") # 3列目を含めた距離は、1.5dist(xy, method="manhattan")の値が、1でもなく、NAでもなく、1.5となるのは、何故でしょうか?
K (2007-06-22 (金) 10:03:40)
度数分布表の値をもとに処理をしようとしているのですが、データフレームからデータが取り出せずに困っています。> dbh_table <- table(data$DBH.Cls0) > dbh_df <- data.frame(dbh_table) > dbh_df DBH.Cls0 Freq 1 18 5 2 22 10 3 24 35 4 26 45 5 28 30 (中略) 20 58 5 21 60 5 22 72 5としてデータフレームdbh_dfを作成したのですが、2列目のデータについては
> dbh_df[1,2] [1]5として欲しい"5"だけが得られるのですが、1列目のデータについては
> dbh_df[1,1] [1] 18 22 Levels: 18 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 ... 72となってしまい、必要な"18"の他に余分な1行が表示されてしまい、
x <- dbh_df[1,1]; y <- dbh_df[1,2]としても、xに余分な1行が入ってしまい、処理できずに困っています。 どなたか、原因と対策をご教授いただけますでしょうか。 よろしくお願いします。
EDA (2007-06-21 (木) 19:01:15)
以前、マウスによるポイントの選択方法が掲載されていましたが、データマイニングで試用されている平行座標プロット(パラレルグラフ)をマウスで選択して、選択ラインの情報を見る方法はあるのでしょうか?
奥村泰之 (2007-06-21 (木) 13:38:26)
御世話になっております。 下記のコードに示したように,sub()で文字列を置き換えようとすると, 文字化けする現象が出て困っております。 対応策を御存じの方,お教え頂けると幸いです。> sessionInfo() R version 2.5.0 Patched (2007-04-27 r41346) i386-pc-mingw32 locale: LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932; LC_NUMERIC=C;LC_TIME=Japanese_Japan.932 > sub("AA", "山本", "AA氏") [1] "山本氏" > sub("AA", "五十嵐", "AA氏") [1] "五女虫?x81"
ちょろ (2007-06-20 (水) 14:29:14)
散布図を加工としております。
しかし、plot関数ではデータが一直線に並んでしまい、同じような値を重ねることなく、全ての個々の値の分布を直感的にとらえることは困難です。
一つ一つのドットが重ならないようにしたいのですが、どのように行えばよいか分からず困っております。
イメージ的には以下のURLの一番上にある画像の左上部のようなPlotをイメージしております。
http://www.ne.jp/asahi/room/kuro/ScatterMakerReadMe.html
ご教授いただければ幸いです。
ぼう (2007-06-19 (火) 17:59:04)
お世話になります。XYZの3次元のデータがあり、Zを色分けしてx-y2次元のプロットに表示したい場合に以下のようにifを使って、一個づつ指定して離散的に色分けして表示することができますが、この部分を連続的にZの値にしたがったグラデーションで指定する方法をご存知の方がおりましたらお教え頂ければ幸いです。
mat <- matrix(rnorm(30),nrow=10) plot(mat[,1],mat[,1],col= ifelse(mat[,3]>0.6,2, ifelse(mat[,3]>0.3,3, ifelse(mat[,3]>0,4, ifelse(mat[,3]>-0.3,5, ifelse(mat[,3]>-0.6,6, 7 ) ) ) ) ) )
mat <- matrix(rnorm(30),nrow=10) plot(mat[order(mat[,3]),][,1],mat[order(mat[,3]),][,2],col=rainbow(10))
mat <- matrix(rnorm(30), nrow=10) m = 5 # 階級の個数 # suf は データの値により 1〜m になる # 例ではいい加減に分類したけど findInterval の第二引数で適切に指定のこと suf <- findInterval(mat[,3], seq(min(mat[,3]), max(mat[,3]), length.out=m)) plot(mat[,1], mat[,2], col=rainbow(m)[suf]) # rainbow でなくても良いから
plot(mat[order(mat[,3]),][,1],mat[order(mat[,3]),][,2], col=rep(c("red","orange","yellow","green","blue","violet"), hist(mat[,3],breaks=c(min(mat[,3]),-.6,-.3,0,.3,.6,max(mat[,3])),plot=F) $counts))
くに (2007-06-19 (火) 10:24:13)
plotでx軸、y軸を(0,0)などの任意の座標で交わらせることはできますか?のように。よろしくお願いします。
> x <- runif(20, min=40, max=100) > y <- runif(20, min=10, max=40) > plot(x, y, axes=FALSE, xlim=c(0,100), ylim=c(0, 80)) > axis(1, pos=0) > axis(2, pos=0)
V9 (2007-06-13 (水) 14:31:14)
たまたま等高線の話題なので、続けさせていただきます。
contourで描いた等高線に、二次元の点をプロットしたく思っています。
単なるcontourではスケールをぴったり合わせられるのですが、filled.contourでは、凡例表示分だけ微妙にずれてしまうようです。
スケール(軸のメモリ)を合わせるのに、何かうまい方法はありますでしょうか。
以下にエラーif (axes) { : 引数の長さが0です filled.contour( x,y,z, levels=c(0,10,30,50,70,90,100), xlim=c(-1,1),ylim=c(-100,100),key.axes=axis(4,seq(0,100,by=10)), plot.title=title(main="main-title",xlab="x",ylab="y"), key.title=title("ex"), axes={axis(1);axis(2);points(exdata,pch=16,col="black")}, )
x y 1 -0.2 20 2 0.8 40 3 0.1 30 ・・・
filled.contour( x,y,z, levels=c(0,10,30,50,70,90,100), xlim=c(-1,1),ylim=c(-100,100),key.axes=axis(4,seq(0,100,by=10)), plot.axes={axis(1); axis(2); points(exdata, pch=16, col=c("red", "deeppink", "black", "deepskyblue", "blue"))}, legend(0, 0, paste("value", c("0-20%", "20-40%", "40-60%", "60-80%", "80-100%")), bg="gray", col=c("blue", "deepskyblue", "black", "deeppink", "red"), pch=16), plot.title=title(main="main-title",xlab="x",ylab="y"), key.title=title("ex") )
(2007-06-13 (水) 13:43:54)
等高線を描くために外積を計算しようとしていますが、lengthの長さがうまく設定できないためか、以下のようなエラーメッセージが出てしまいます。。
何かうまい設定法がございましたら、ご教示頂けると幸いです。> x<-seq(-4,4,length=20) > y<-seq(-10000,4000,length=20) > z<-outer(x,y,function(xi,yj) 100/(1+exp(-(0.279-1.0344*x-0.0001*y))) + ) 以下にエラーouter(x, y, function(xi, yj) 100/(1 + exp(-(0.279 - 1.0344 * : dim<- : dims [product 400] は object [20] の長さに整合しません
あ (2007-06-10 (日) 20:00:15)
sourceで時系列オブジェクトを読み込もうとしたら、下記のエラーがでました。以下にエラーattributes(.Data) <- c(attributes(.Data), attrib) : 不正な時系列パラメータが指定されましたこのエラーはどのような意味なのでしょうか。
読み込もうとしているデータは以前に読み込みを成功した事があるデータを多少中身を変更しただけのものです。
くに (2007-06-07 (木) 12:14:30)
ヒストグラムのy軸目盛(スケール?)の変更は可能でしょうか。
面積が0.3ヘクタールの調査区で樹木の胸高直径を測定しました。このデータから、直径階毎の本数分布をhist関数で作図したいと思います。ただし、そのとき縦軸の目盛を試験区(0.3ha)あたりの本数ではなく、1ヘクタールあたりの本数にしたいのです。
そのようなことは可能でしょうか。よろしくお願いします。
set.seed(77789) x <- rnorm(100, mean=20, sd=5) par(mar=c(4,4,1,4)) hist(x) axis(4, at=0:4*10, labels=round(0:4*10*(1/0.3),1))
>area=0.3 >layout(matrix(1:2),2) >DBHclass <- round((data$x+0.05)/2,0)*2 >#15cm以上17cm未満は18cmという、2cm刻みの直径階にするための処理 >brks <- seq(14,74,by=2) >hist(DBHclass, breaks=brks,xlab="胸高直径階(cm)", ylab="立木本数(本/plot)") > >DBH_table <- table(DBHclass) >plot(DBH_table/area,type="h",xlab="胸高直径階(cm)", ylab="立木本数(本/ha)") > >dbh<-data.frame(DBH_table/area) >dbh DBHclass Freq 1 18 5 2 22 10 3 24 35 4 26 45 5 28 30 6 30 55 7 32 45 8 34 60 9 36 55 10 38 90 11 40 75 12 42 65 13 44 85 14 46 30 15 48 10 16 50 10 17 52 10 18 54 15 19 56 5 20 58 5 21 60 5 22 72 5このデータフレームから、forループか何かで c(18,18,18,18,18,20,....,60,60,72)というようなベクトルをつくって、それをhist関数に渡す。力業?もっとエレガントな方法があるのでしょうか? -- くに 2007-06-07 (木) 15:53:37
set.seed(77789) x <- rnorm(100, mean=20, sd=5) temp <- hist(x, breaks=seq(5,40,2), axes=FALSE, xlab="胸高直径階 (cm)", ylab="立木本数 (本/ha)", main="") axis(2, 0:5*3, round(0:5*3*10/3,0)) axis(1, temp$breaks)
set.seed(77789) hist(x,yaxt="n") axis(2,seq(par()$yaxp[1],par()$yaxp[2],5))固定値は限りなく少なくなる筈.
axis(2, 0:5*3, round(0:5*3*10/3,0))としたところ、欲しいグラフが得られました。皆さん、ありがとうございました。 -- くに 2007-06-11 (月) 15:57:12
kd (2007-06-06 (水) 10:16:48)
リストを与えて,和や部分リストを得たいのですが方法はあるでしょうか? はじめに下記のようにしました.> dwt<-dwt(x,n.levels=8, boundary="reflection") > str(dwt@W) List of 8 $ W1: num [1:300, 1] -0.188 0.166 -0.150 0.170 0.115 ... $ W2: num [1:300, 1] 0.6416 0.5408 0.0322 -0.3626 -0.2186 ... : :次に,この dwt@W に対して和や部分リストを得たい思っています.例えば,
dwt@W[1:4]に対して
dwt@W[[1]]+dwt@W[[2]]+dwt@W[[3]]+dwt@W[[4]]を得たり,
dwt@W[1:4]に対して
list(dwt@W[[1]][1:150],dwt@W[[2]][1:150],dwt@W[[3]][1:150],dwt@W[[4]][1:150])を得たいと思っています.
dwt@W[[1]]+dwt@W[[2]]+dwt@W[[3]]+dwt@W[[4]]ってやって正しい答えが出るならそれでいいじゃんか -- 2007-06-06 (水) 11:01:17
kd (2007-06-03 (日) 15:05:17)
下記のように,指定データを除いてプロットすることは可能でしょうか?
最初に下記を行いました.> newx<-modwt(x,n.level=8,boundary="reflection") > str(newx2) Formal class 'modwt' [package "wavelets"] with 11 slots ..@ W :List of 8 .. ..$ W1: num [1:3061, 1] -1.82e-06 3.58e-05 -1.12e-04 9.52e-05 4.66e-05 ... : : ..@ V :List of 8 .. ..$ V1: num [1:3061, 1] -2.14e-06 3.91e-05 1.48e-04 1.21e-04 7.28e-06 ... : : > plot(newx)このplot(newx) を実行すると,x,newx@W[1],newx@W[2],...,newx@W[8],newx@V[8] をプロットしてくれました.
次にnewx@V[8] だけを除いたプロットを行いたいので,下記の ???? に当たるような操作(?)を行うのかなと思っているのですが可能でしょうか?> newx1<-????(newx) > plot(newx1)またnewx@W[8] だけをプロットすることも可能でしょうか?
> newx2<-????(newx) > plot(newx2)
kd (2007-06-02 (土) 21:23:34)
locfit を v. 2.5 for MacOSX 上でロードしようとすると,下記のようなエラーが出て,ロードできないようです.要求されたパッケージ akima をロード中です エラー: パッケージ 'akima' をロードできませんでした 追加情報: Warning message: 'akima' という名前のパッケージはありません in: library(pkg, character.only = TRUE, logical = TRUE, lib.loc = lib.loc)locfit は下記からダウンロードしたものです.
ftp://ftp.u-aizu.ac.jp/pub/lang/R/CRAN/bin/macosx/universal/contrib/2.5/locfit_1.5-3.tgz
ちなみにwavelets等の他のパッケージは正常にロードできて動いています.
ftp://ftp.u-aizu.ac.jp/pub/lang/R/CRAN/bin/macosx/universal/contrib/2.5/wavelets_0.2-2.tgz
mori (2007-06-01 (金) 10:41:10)
カレントディレクトリに存在するファイル名の一覧をベクトル形式で取得したいのですがそのような関数はないでしょうか?たとえば、カレントディレクトリに file1 file2 file3 があったら c("file1", "file2", "file3") を返すような関数です。
> identical(dir, list.files) [1] TRUE
akira (2007-05-31 (木) 20:22:00)
測定器が出力するTiffファイルの1行目に測定条件が記入されています。エディター(xyzzy)では確認できるのですが、Rで読み込むとエラーになって読み込めません。> x <- readLines("test.tiff", n=1) Warning message: 'test.tif' に関する readLines で不完全な最終行が見つかりました画像ファイルをテキストで読み込む方法を教えてください。
OS:WinXPSP2
R version 2.5.0 Patched (2007-05-04 r41429) i386-pc-mingw32 です。
こんなファイルを foo [9] > hexdump -c yellow.tiff 0000000 M M ?0 * ?0 ?0 002 220 301 ?0 301 ?0 301 ?0 356 ?0 0000010 030 001 9 023 ?0 ] ] 037 ?0 253 z ) ?0 346 z ) 読んでみました。 R での結果は以下のようになりました。 > x<-readLines("yellow.tiff", n=1) > x [1] "MM" これがあなたの望む結果なんでしょうか。あなたが読んだ tiff ファイルがどうなのかにもよるのかなぁ。 > sessionInfo() R version 2.5.0 Patched (2007-05-18 r41630) powerpc-apple-darwin8.9.1
> x <- readLines(dir()[1]) Warning message: '810IS_l0.jpg' に関する readLines で不完全な最終行が見つかりました > x [1]エラー:マルチバイト文字列が不正ですなお、測定器のTiffファイルにも同じように測定条件の文字列が記入されています。
> x <- readBin("test.tiff", what="character", endian="swap") > x [1] "II*"で、scan()を試してみたら、"エラー:マルチバイト文字列が不正です"はでていますが、最後まで読み込めたみたいです。
> x <- scan("test.tiff", what="character") Read 26373 items > x [1] "II*" [2] "" [3]エラー:マルチバイト文字列が不正ですこれならいけそうです。
con<-file("binary.file",open="rb") raw<-readBin(con,"raw",8) raw # Hexで出る # もし, rawの中がEUCで自分の環境がUTF-8なら" iconv(rawToChar(raw),"EUC-JP","utf-8") # めでたし,めでたし close(con)などとしないとダメでしょう.
con <- file(description=i, open="rb", blocking = TRUE) x <- scan(con, what="logical", n=20, sep=NULL, comment.char="")どの辺が「ほぼ」かというと、^@のコードの直後の文字が取得できていません。とりあえず満足です。 -- akira 2007-06-19 (火) 15:54:23
通りすがりの佐々木 (2007-05-31 (木) 16:22:29)
R用PC(Athlon64,3200,2G,WXPSP2)をMBオンボードのRAIDを使っていたのですが、システム領域(RAIDなし)とデータ領域を独立したHDD(RAID1)に分けてしました。先月のはじめ、起動中のリソース使用率を見てみたら、いままで100%くらいだったのが70%になっていました。そろそろ再インストールかなと思っていたら、システムのHDDが突然死されました(RAIDなし!!)。BIOSのSMARTでディスクを交換せよとの警告が表示されてしまいました。データはデータ用のHDDに保存し、スクリプトはシステムにいれていたのですが、大部分のデータは幸いにも生きていましたが、1年分のスクリプトが消失しました。けっこうキツイ・・・。やはり、CPUを100%24時間*7日なんてことをずっとやっていたからでしょうか、アクセスが多くなるとHDDの熱がすごいんですね。CPUばかり気を使っていたので、HDDは対策が疎かになっていたのでした。反省。RAID2系統+ファン増設を行ったのはいうまでもありません。
GG (2007-05-31 (木) 11:55:06)
2変数(x、y)関数の値(z)を求めることなく、
式の形から等高線を直接描ける方法はあるのでしょうか?
例えば、z=1/(1+exp(-(10x-3y)))のようなグラフを直接3次元で描画し、
適当に等高線で色分けした後に、
さらに重ねがきで幾つか点もプロットしたいと思っています。
のり (2007-05-27 (日) 20:39:34)
Rインストール後、コマンド(R console)で日本語入力しても全くグラフが表示されません。
(例)x=0:50 y=dbinom(x,50,0.25) plot(x,y,type=’h’,xlab=’x’,ylab=’y’,main=’二項分布’) +(注、type=hはヒストグラム表示、xlab、ylabはx、y軸の名前、mainはグラフのタイトルを表す。日本語を入力しない他のコマンドでは、グラフが表示されます。)
(使用環境 windowsXP)
この解決方法をご存じの方がおりましたら、ご教示いただけないでしょうか?
(尚、この質問は最初、初級者コースが閉鎖されていると認識し、中級者コースに投稿しました。ご指摘いただきましたokinawa様にはお手数おかけしましたことをお詫びいたします)
x=0:50 y=dbinom(x,50,0.25) plot(x,y,type='h',xlab='x',ylab='y',main='二項分布')
x <- c(0:50) y <- dbinom(x,50,0.25) plot(x,y,type='h',xlab='x',ylab='y',main='二項分布')
x <- 0:50 y <- dbinom(x,50,0.25) plot(x,y,type="h",xlab="x",ylab="y",main="二項分布")
> order(x <- 1:10) [1] 1 2 3 4 5 6 7 8 9 10 > x [1] 1 2 3 4 5 6 7 8 9 10 > order(X = 1:10) [1] 1 2 3 4 5 6 7 8 9 10 > X エラー: オブジェクト "X" は存在しません
> identical(c(1:10), 1:10) [1] TRUE
ピーター (2007-05-25 (金) 18:46:30)
Mac OS X 10.4.9, R 2.5.0 GUI 1.19(4308)を使っています
「パッケージとデータ」のCRANからvcdをインストールし、「Rパッケージマネージャー」でvcdの状態のところをクリックしてもロードできません。コンソールには要求されたパッケージ colorspace をロード中です エラー: パッケージ 'colorspace' をロードできませんでした 追加情報: Warning message: 'colorspace' という名前のパッケージはありません in: library(pkg, character.only = TRUE, logical = TRUE, lib.loc = lib.loc)とあります。また、library(vcd)でも同様でした。
一体なぜののでしょうか。教えてください。お願いします。
dmc (2007-05-23 (水) 13:42:22)
scattaerplot3d関数で三次元プロットした点に、persp関数で二次元曲面を描きいれようと思っているのですが、軸やグラフの角度がうまく合いません。
点と曲面をうまくひとつのグラフ内に描く方法がございましたら、教えて頂けないでしょうか。
x <- seq(-10, 10, length= 30) y <- x f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } z <- outer(x, y, f) z[is.na(z)] <- 1 pmat<- persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", ltheta = 120, shade = 0.75, ticktype = "detailed", xlab = "X", ylab = "Y", zlab = "Sinc( r )") p<-list(x=runif(100,-10,10), y=runif(100,-10,10), z=runif(100,0,5)) points(trans3d(p$x,p$y,p$z, pmat), col = 2, pch =16)
port (2007-05-23 (水) 12:02:52)
Rの超初心者です。
10000個くらいのデータがあって,そのデータの中でマイナスとなるデータ個数を知りたいのですが,どのうようにすればよいでしょうか?
色々調べたのですが,よくわかりませんでした。
どのたかご教授ください。
みかん (2007-05-14 (月) 04:58:23)
「Tips紹介」→「R にファイルを読み込む tips 集(暫定版)」→
「Excel からコピーしたセル範囲を R に読み込む (何でも掲示版の青木繁伸さんの記事を転載)」
に記載されております方法が上手くいきません。
記載事項の通り、> from.excel <- function(nc) + { + matrix(scan(""), byrow=TRUE, nc=nc) + } > from.excel(3)としたのち、 エクセルで
1 F 4 2 F 3 3 M 2という3×3のセル範囲をコピーし、貼り付けると、
> from.excel(3) 1: 1F4 1: 2M3 以下にエラーscan("") : scan 関数は '$s' を期待したのに、得られたのは '$s' でした > 3F2 エラー:"3F2" に構文エラーがありました >というメッセージが出てきます。
一方同じExcelのコピー範囲を一度テキストエディタに貼り付け、"?t"を" "に置換してからコピーし、> x <- read.table(stdin())の後に貼り付けると、上手くいきます。
しかしこの方法でも、Excelでコピーしたそのままを貼り付けると、> x <- read.table(stdin()) 0: 1F4 1: 2M3 2: 3F2 3: >となってしまいます。
どうもExcelでコピーした列セル間の区切り子が、R上で認識されていない様子です。
どうしてこうなってしまうのか、ご教授をお願いいたします。
当方WindowsXP上で、ver.2.2.1を使用しております。Excelのバージョンは2000です。
よろしくお願いいたします
> x <- read.table(stdin(),header=FALSE) 0: 1 F 4 1: 2 F 3 2: 3 M 2 3: > x V1 V2 V3 1 1 F 4 2 2 F 3 3 3 M 2
from.excel2 <- function(h = 0) { dat <- (read.delim("clipboard", header=h)) }のような関数を別に定義してExcelのデータを読み込んでいます。
TH (2007-05-13 (日) 09:21:44)
直交実験を計画してくれる関数はどこかのRパッケージに含まれていないでしょうか?"Orthogonal Array Design"を中心にいろいろ検索をかけても見つかりません.S-PLUSには直交実験を計画してくれるとても便利な 関数oa.design() があります.もちろんoa.design() と打てば,その定義が画面にでてきます.その中に出てくる関数も含めて(途中で追えなくなるので,追えるものだけ)まとめて,Rの画面で流すとエラーがでてしまい,移植に失敗します.中身を少し読んでも私の実力ではとうてい書き換えられません.直交配列による実験は我が国では,大変多用されているので,どこかにないだろうかとお聞きする次第です.
SDE (2007-05-10 (木) 19:02:49)
確率微分方程式で検索してもヒットしなかったのですが、
解を求めるなど、確率微分方程式を取り扱ったパッケージは無いのでしょうか?
Rの守備範囲だと思うのですが…
X Jr. (2007-05-09 (水) 22:20:18)
どのカテゴリに書こうか迷ったのですが、とりあえず初級Q&Aにします。
「どうしてプログラマに・・・プログラムが書けないのか?」という翻訳記事の中の「Fizz-Buzz問題」が一部のネット上で話題になっています(例えばはてなブックマーク)。その内容は、「1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。」というものです。Rならどのようなプログラムができますか? お遊び感覚でお願いします。
> x <- 1:100 > print(ifelse(x%%15==0,"FizzBuzz", ifelse(x%%3==0,"Fizz", ifelse(x%%5==0, "Buzz", x)))) [1] "1" "2" "Fizz" "4" [5] "Buzz" "Fizz" "7" "8" [9] "Fizz" "Buzz" "11" "Fizz" [13] "13" "14" "FizzBuzz" "16" [17] "17" "Fizz" "19" "Buzz" : [93] "Fizz" "94" "Buzz" "Fizz" [97] "97" "98" "Fizz" "Buzz"
x <- 1:100 x[1:33*3] <- "Fizz" x[1:20*5] <- "Buzz" x[1:6*15] <- "FizzBuzz" print(x)
> x<-1:100;cat(ifelse(!x%%15,"FizzBuzz",ifelse(!x%%3,"Fizz",ifelse(x%%5,x,"Buzz")))) 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 2文字だけ短いもの(!?) x<-1:100;cat(ifelse(x%%15,ifelse(x%%3,ifelse(x%%5,x,"Buzz"),"Fizz"),"FizzBuzz"))
M<-expression(1:100) x<-eval(M) x[!eval(M)%%3]<-"Fizz" x[!eval(M)%%5]<-"Buzz" x[!eval(M)%%3&!eval(M)%%5]<-"FizzBuzz"
x<-1:105 dim(x)<-c(3,105/3) x[3,]<-"Fizz" dim(x)<-c(5,105/5) x[5,]<-"Buzz" dim(x)<-c(15,105/15) x[15,]<-"FizzBuzz" cat(x[1:100]) これも,ほんの少しだけ短くなる a<-function(i,s){dim(x)<<-c(i,105/i);x[i,]<<-s} x<-1:105 a(3,"Fizz") a(5,"Buzz") a(15,"FizzBuzz") cat(x[1:100])
> for (i in 1:100) { + if(i%%15==0) cat("FizzBuz,") + else if (i%%3==0) cat("Fizz,") + else if(i%%5==0) cat("Buz,") + else cat(i,",")}
[1] 2.744 0.000 2.757 0.000 0.000 [1] 2.737 0.000 2.748 0.000 0.000 [1] 2.712 0.000 2.723 0.000 0.000 [1] 2.676 0.004 2.698 0.000 0.000 [1] 2.628 0.000 2.633 0.000 0.000 [1] 2.632 0.000 2.649 0.000 0.000
> a <- function(){ + for (i in 1:1e7) { + if(i%%15==0) 15 + else if (i%%3==0) 3 + else if (i%%5==0) 5 + else 0 } + } > system.time(a()) ユーザ システム 経過 34.522 0.116 34.522 > b <- function() { + for (i in 1:1e7) { + if (i%%3==0 && i%%5!=0) 3 + else if(i%%3!=0 && i%%5==0) 5 + else if(i%%15==0) 15 + else 0 } + } > system.time(b()) ユーザ システム 経過 46.421 0.133 46.393 > bb <- function() { # こうすれば,無駄な比較をしないで,かつ「正しい」 + for (i in 1:1e7) { + if(i%%3==0) { + if (i%%5==0) 15 else 3 + } + else { + if (i%%5==0) 5 else 0} + } + } > system.time(bb()) ユーザ システム 経過 29.060 0.138 29.072
replace(replace(replace(1:100,1:33*3,"Fizz"),1:20*5,"Buzz"),1:6*15,"FizzBuzz")
昔の名前で出ています (2007-05-09 (水) 16:13:25)
R 2.5.0 をインストールして、使おうとしている途中です。~
ディレクトリの設定をして、q() で「作業スペースを保存」しても、実際には何も保存されません。~
それでは、と、「作業スペースの保存」をして、できた .RData をダブルクリックしたら、R 2.4.0 が立ち上がります。なぜでしょう。> sessionInfo() R version 2.5.0 (2007-04-23) i386-pc-mingw32 locale: LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932 ;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932 attached base packages: [1] "stats" "graphics" "grDevices" "utils" "datasets" "methods" [7] "base" > # この後、ワーキングディレクトリを設定 > getwd() # 設定の確認 [1] "C:/Documents and Settings/Owner/デスクトップ/r" > # 作業スペースの保存 > save.image("C:??Documents and Settings??Owner??デスクトップ??r??.RData") > #ここで、いったん終了 > q()デスクトップ??r??.RData をダブルクリックすると、なんと、R 2.4.0 が立ち上がる!
> sessionInfo() R version 2.4.0 (2006-10-03) i386-pc-mingw32 locale: LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932 ;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932 attached base packages: [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" [7] "base"
norion (2007-05-06 (日) 21:50:20)
hist(5,x)というカキコミをして、(xにはあらかじめ数値列がつくってある)'breaks' の数が無効です というエラーメッセージがでます。5のところを500とかに変えても同じです。データの数は全部で2000足らずです。
よろしくお願いします。
ななし (2007-05-05 (土) 13:35:36)
x11() #ウインドウ一つめ plot(1:10) x11() #ウインドウ二つめ plot(2:11)このとき一つ目のウインドウにグラフを追記したいのですが可能でしょうか?
ひとつのウインドウを分割する場合、split.screenで分割して、screenで描き出す場所を指定するというのがありますがそれのウインドウ版のようなのを探しています。
御存じの方教えてください。
R version 2.4.0
os linux-gnu vine/linux4.0
x11() #ウインドウ一つめ plot(1:10, main="1つめ") x11() #ウインドウ二つめ plot(2:11, main="2つめ") dev.set(dev.prev()) ##1つめに移動 lines(1:10) #1つめに追記 dev.set(dev.next()) ##2つめに移動 lines(2:11) #2つめに追記 graphics.off()
たく (2007-05-01 (火) 12:46:50)
gaarchFitで解析したいものがあり、試しにUKgasでやってみたらこういうエラーが出ました・・・。
どうすれば使えるようになるのでしょうか。 バージョンは2.4.1、OSはXPです。> data(UKgas) > library(fSeries) > UKg.d<-diff(UKgas) > UKg.m <-garchFit(formula.mean =~arma(2,0),formula.var=~garch(1, 1),series = UKg.d) 以下にエラー.modelSeries(fake = FALSE, lhs = TRUE) : 引数 "formula" がありませんし、省略時既定値もありません
> UKg.d<-diff(UKgas) > UKg.m <-garchFit( formula = ~arma(2,0)+aparch(1,1),data = UKg.d) [1] "arma(2, 0)" "aparch(1, 1)" Series Initialization: ARMA model: arma Formula mean: ~ arma(2, 0) GARCH model: aparch Formula var: ~ aparch(1, 1) ARMA Order: 2 0 Max ARMA Order: 2 途中省略 Hessian Matrix: mu ar1 ar2 omega mu 0.4038139 -14.661207 -4.759985 0.005485700 ar1 -14.6612069 3721.675424 502.178082 -0.430102036 ar2 -4.7599849 502.178082 4486.891725 -1.201257840 途中省略 gamma1 -9.5579802 57.61092815 -4.6013946 -8.7055680 beta1 85.2086937 -4.60139464 240.7460409 -101.1148148 delta -22.7605912 -8.70556795 -101.1148148 58.0273266 --- END OF TRACE --- Warning message: 計算結果が NaN になりました in: sqrt(diag(fit$cvar)) > summary(UKg.m) Title: GARCH Modelling Call: garchFit(formula = ~arma(2, 0) + aparch(1, 1), data = UKg.d) 途中省略 Information Criterion Statistics: AIC BIC SIC HQIC -9.893399 -9.693561 -9.903576 -9.812388 Description: Tue May 1 15:54:32 2007 by user:
TH (2007-04-29 (日) 08:13:46)
私が探した範囲ではRでは,多次元尺度法を行う関数として,以下の関数が用意されています.計量的多次元尺度法のための関数 パッケージ'stats'の関数 cmdscale 非計量多次元尺度法のための関数 パッケージ'MASS'の関数 isoMSD ,関数 sammon パッケージ'vegan'の関数 metaMSDしかし個人差を扱う,3元データ用のMDSモデルのINDSCALを実行する関数がみあたりません.MDSのなかでは有名な分析方法なので,私の探し方が悪いようにも思うのですが,どなたかINDSCALを実行する関数をご存知の方がいらっしぃませんか.
saoki (2007-04-27 (金) 23:29:18)
R/qtlがloadできません。初めてRを使う初心者です。どなたかご教授いただけましたら幸いです。
Mac OSX バージョン10.4.7のintel MacにR-2.50をインストールしqtl_1.05-2.tarでパッケージqtlを出してlibrary中に入れ、library(qtl)とtypeしたところ以下のように出てきます。> library(qtl) Error in dyn.load(x, as.logical(local), as.logical(now)) : 共有ライブラリ '/Library/Frameworks/R.framework/Versions/2.5/Resources/library /qtl/libs/i386/qtl.so' を読み込めません dlopen(/Library/Frameworks/R.framework/Versions/2.5/Resources/library/qtl/libs/ i386/qtl.so, 6): Library not loaded: /Library/Frameworks/R.framework/Versions/2.4/ Resources/lib/libRlapack.dylib Referenced from: /Library/Frameworks/R.framework/Versions/2.5/Resources/library/qtl/libs/i386/qtl.so Reason: image not found 以下にエラーlibrary(qtl) : .First.lib は 'qtl' に対して失敗しましたよろしく御願いいたします。
> sessionInfo() R version 2.5.0 Patched (2007-04-26 r41343) powerpc-apple-darwin8.9.1 locale: ja_JP.UTF-8/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8 attached base packages: [1] "stats" "graphics" "grDevices" "utils" "datasets" [6] "methods" "base" other attached packages: qtl "1.05-2" > library(qtl) > example(bayesint) baysnt> data(hyper) baysnt> ## Don't show: baysnt> hyper <- subset(hyper, chr=c(1,4)) baysnt> ## End Don't show baysnt> hyper <- calc.genoprob(hyper, step=0.5) baysnt> out <- scanone(hyper, method="hk") baysnt> bayesint(out, chr=1) chr pos lod c1.loc33 1 36.3 2.454921 c1.loc44.5 1 47.8 3.562391 c1.loc80.5 1 83.8 2.511073 以下略
R version 2.6.0 Under development (unstable) (2007-04-26 r41343) Copyright (C) 2007 The R Foundation for Statistical Computing ISBN 3-900051-07-0 中略 'q()'と入力すればRを終了します。 [Workspace restored from /Users/***/***/***/.RData] > library(qtl) > library(help=qtl) > 要するに,ここまでで何のエラーもないし,この後もちゃんと動く
goto (2007-04-25 (水) 17:57:25)
どなたか教えてください。
以下のサンプルでは要素(球体)やノードを大きくしたり加工しています。
どのようにしたらこのようになるのでしょうか。
gplot関数のパラメータを変更するのでしょうか。http://erzuli.ss.uci.edu/R.stuff/sna/screenshots/sna_sample3.png
ロトリング (2007-04-24 (火) 21:24:31)
Rで出力したグラフに、ポリゴンやテキストをマウスで描画できるお絵かきツールのようなものはないでしょうか?
poly.xy <- locator(type = "l")
suz (2007-04-21 (土) 11:23:24)
95%信頼区間楕円を描く方法として以下の操作は正しいでしょうか?x = rnorm(100, sd=1) y = rnorm(100, sd=3) plot(x, y) library(ellipse) r = cor(x, y) stdev = c(sd(x), sd(y)) centre = c(mean(x), mean(y)) polygon(ellipse(r, scale=stdev, centre=centre, level=0.95))
> V <- rbind(c(var(x), var(x,y)),c(var(x,y),var(y))) > a <- ellipse(V, centre=centre, level=0.95) > b <- ellipse(r, scale=stdev, centre=centre, level=0.95) > identical(a,b) [1] TRUE
set.seed(101) x = rnorm(100, sd=1) y = rnorm(100, sd=3) xy = cbind(x,y) library(ellipse) stdev = c(sd(x), sd(y)) centre = c(mean(x), mean(y)) plot(x,y) polygon(ellipse(var(xy), scale=stdev, centre=centre, level=0.95)) #1 polygon(ellipse(var(xy), scale=c(1,1), centre=centre, level=0.95)) #2 polygon(ellipse(var(xy), centre=centre, level=0.95)) #3 polygon(ellipse(cor(x,y), scale=stdev, centre=centre, level=0.95)) #4 polygon(ellipse(cor(x,y), scale=c(1,1), centre=centre, level=0.95)) #5 polygon(ellipse(cor(x,y), centre=centre, level=0.95)) #695%信頼区間楕円を描く方法として#1から#6のどれが正しいのでしょうか?
#3と#4は同じ楕円を描きます。 scaleのデフォルトはc(1,1)ですが、#2と#3は同じ楕円を描きません。(#5と#6は同じ楕円を描きます)
suzu (2007-04-20 (金) 16:32:43)
グラフィックパラメータpar(mfrow=c(行数, 列数))の行数によってplotmeansの動作が異なります。
library(vegan) data(BCI) sp.n = specnumber(BCI) group = gl(5, 10) library(gplots) par(mfrow=c(7,1)) # 行数によってplotmeansの動作が異なる plotmeans(sp.n ~ group)
において
par(mfrow=c(6,1))
の場合、正常に動作しますが、
par(mfrow=c(7,1))
の場合、group 4のエラーバーが表示されず、以下のWarning messagesが出力されます。
Warning messages: 1: 長さゼロの arrow は角度が不定ですので,スキップされました 2: 長さゼロの arrow は角度が不定ですので,スキップされました
エラーバーを正常に表示させるためには、どうすればよろしいでしょうか?
使用環境 R version 2.4.0 (2006-10-03) i386-apple-darwin8.8.1 参考文献 http://cse.naro.affrc.go.jp/takezawa/r-tips/r/68.html
mori (2007-04-19 (木) 15:03:13)
ファイルからデータを読み込む方法に関して質問があります。[test.txt] milk bread bread butter beer milk bread butter bread butter上のようなtest.txtからデータを読み込んで下のように作ったリストと同じリストを返す関数がほしいのですがどのようにファイルを読み込めばよいでしょうか。read.table()は列数が同じものしか読み込めないらしくうまく読み込めません。アドバイスお願いします。
> x <- list(c("milk","bread"), c("bread", "butter"), c("beer"), c("milk", "bread", "butter"), c("bread", "butter"))
x <- as.matrix(read.table("test.txt", header=FALSE, fill=TRUE)) dimnames(x) <- NULL apply(x, 1, function(a) a[a != ""])こんな別解も
a <- sapply(readLines("test.txt"), function(s) unlist(strsplit(s, " "))) names(a) <- NULL
> sapply(as.list(readLines("test.txt")), function(i) strsplit(i, split=" ")) [[1]] [1] "milk" "bread" [[2]] [1] "bread" "butter" [[3]] [1] "beer" [[4]] [1] "milk" "bread" "butter" [[5]] [1] "bread" "butter" Warning message: 'test.txt' に関する readLines で不完全な最終行が見つかりました 注:上の warning は,ファイルの最後に EOF がないために出る。 ちゃんとしたファイルなら warning は出ない。
mapply(strsplit, as.list(readLines("test.txt")), split=" ")
ケンゴ (2007-04-14 (土) 16:05:43)
こんにちは、garchFit(パッケージfSeries)関数を使用し時系列データの計算を
おこないたいと思い以下のような処理を致しました。
結果「エラー:!missing(data) is not TRUE」と表示されうまく計算できません。
どこか間違っているのでしょうか?教えて下さい。
使っているのはR2.4.1 OSはXPです。> library(fSeries) > UKgas Qtr1 Qtr2 Qtr3 Qtr4 1960 160.1 129.7 84.8 120.1 1961 160.1 124.9 84.8 116.9 1962 169.7 140.9 89.7 123.3 1963 187.3 144.1 92.9 120.1 1964 176.1 147.3 89.7 123.3 1965 185.7 155.3 99.3 131.3 1966 200.1 161.7 102.5 136.1 1967 204.9 176.1 112.1 140.9 1968 227.3 195.3 115.3 142.5 1969 244.9 214.5 118.5 153.7 1970 244.9 216.1 188.9 142.5 1971 301.0 196.9 136.1 267.3 1972 317.0 230.5 152.1 336.2 1973 371.4 240.1 158.5 355.4 1974 449.9 286.6 179.3 403.4 1975 491.5 321.8 177.7 409.8 1976 593.9 329.8 176.1 483.5 1977 584.3 395.4 187.3 485.1 1978 669.2 421.0 216.1 509.1 1979 827.7 467.5 209.7 542.7 1980 840.5 414.6 217.7 670.8 1981 848.5 437.0 209.7 701.2 1982 925.3 443.4 214.5 683.6 1983 917.3 515.5 224.1 694.8 1984 989.4 477.1 233.7 730.0 1985 1087.0 534.7 281.8 787.6 1986 1163.9 613.1 347.4 782.8 > UKg.d<-diff(UKgas) > UKg.m<-garchFit(formula=~arma(2,0)+garch(1,1),series=UKg.d) エラー:!missing(data) is not TRUE※条件付き平均(mean)=arma(2,0)
※条件付き分散(variance)=garch(1,1)
?garchFit によれば: garchFit(formula.mean = ~arma(0, 0), formula.var = ~garch(1, 1), series = x, init.rec = c("mci", "uev"), delta = 2, skew = 1, shape = 4, cond.dist = c("dnorm", "dsnorm", "dged", "dsged", "dstd", "dsstd"), include.mean = TRUE, include.delta = NULL, include.skew = NULL, include.shape = NULL, leverage = NULL, trace = TRUE, algorithm = c("sqp", "nlminb", "lbfgsb", "nlminb+nm", "lbfgsb+nm"), control = list(), title = NULL, description = NULL, ...)
UKg.m<-garchFit(formula=~arma(2,0)+garch(1,1),data=UKg.d)のようですよ(?) -- 2007-05-01 (火) 18:10:52
豊田秀樹 (2007-04-14 (土) 07:03:17)
信じられないようなことですが,ちゃんとインストールした
Rのフォルダを単純にUSBフラッシュメモリにコピーして
おくと,そのUSBフラッシュメモリを持ち歩くだけで,Rをインストール
していない計算機でRを使えます.(そのフォルダは,全ての
パッケージがインストールされており1ギガくらいの容量です)
更にそのUSBフラッシュメモリのRののフォルダを単純に
別の計算機にコピーするとその計算機でもRが使えるようになります.
ここで「コピーで済むなら何のためのインストールだったん
だろう?」という疑問が沸いてきました.きっとこの方法で
コピーを繰り返すと「何か困ったことがそのうち起きる」あるいは
「何か使えない高度な機能がある」としか思えません.
文科系の学部なのでインストールはハードルが高い学生もいますが,
コピーだけならだれでもでき,各学生に任せられます.
とても便利なので,つい学生にも薦めて見たくなっていますが,
あとで変なことが起きると困るので,どなたか「インストール
しないと,こういう点で後で困るよ」というアドバイス
がありましたら教えてください.それともインストールなんて
必要ないのでしょうか?そんなことないですよね.
2.6 RをCDやUSBから起動できますか? 注意すればできます。基本的なRインストールは再配置可能(どこに置いても起動可能) ですから、インストールしたRのイメージをハードディスクにコピーしたり、直接 フラッシュメモリUSBドライブ等のリムーバブル記憶装置にインストールすることが できます。(もしパッケージを私的なライブラリ(フォルダー)にインストールして いれば、それらの絶対パスがHTMLパッケージリストに記録されます。) Rの実行には書き込み可能な一時ディレクトリとホームディレクトリへのアクセスが必要 で、もしそうしたものがなければ現在のディレクトリが使われます。これは、適正に 編成されたNTベースのWIndowsのバージョンでは何の問題も起こさないはずですが、 もし問題があれば書き込み可能なフォルダーへのショートカット無しにはRを実行する ことはできないかも知れません。
Warning messages: 1: 'lib.loc' 中に如何なるライブラリー木も見つかりません in: library(package, lib.loc = lib.loc, character.only = TRUE, logical = TRUE, 2: package "methods" in options("defaultPackages") was not found 起動準備中です ー 12 件の警告がありました (警告を見るには warnings() を使って下さい)何かが足りないか(レジストリとかをいじらないといけないようですが、やりかたがわかりません)、設定を間違えているかでしょうけど、それがわかりません。 -- 2007-05-09 (水) 14:04:21
mori (2007-04-12 (木) 14:32:35)
Windows版のR2.4.1なのですが、GUIプリファレンスで指定できる日本語フォントがCourierとMSゴシックとMS明朝しかありません。他の日本語フォントを指定することはできないのでしょうか?
teru (2007-04-11 (水) 19:56:49)
xとyの2変量散布図と,xおよびyのヒストグラムを書きたいのですが,
Rではどのようにすればいいのでしょうか?**| oo ***| ooo ****| oooo ***| oo **| oo *| o ------------- ********* ******* **** **
JR (2007-04-11 (水) 14:24:09)
Rにはperlなどのスクリプト言語でいうハッシュに相当するデータ型はないのでしょうか。例えば、a => 1 b => 2 … z => 26というハッシュと
v=c("a","b",…"z")というベクトルがあったとき、vの各要素をハッシュのキーとして、値に置換するような処理をしたいです。データフレームとsubset関数を使えば強引にできるのですが、遅いです。よい方法はありますでしょうか?
> a <- 1:26 > names(a) <- letters > a a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 > a['b'] b 2
> x <- sample(1:100, 1e6, rep=TRUE) > y <- sample(letters, 1e6, rep=TRUE) > xx <- x > names(xx) <- y > xxx <- data.frame(x=x, y=y) > xx["a"] a 81 > length(xx[names(xx) == 'a']) [1] 38482 > system.time(xx[names(xx)=="a"]) [1] 0.164 0.000 0.166 0.000 0.000 > system.time(xxx$x[xxx$y =="a"]) [1] 0.248 0.000 0.254 0.000 0.000
TT (2007-04-07 (土) 17:30:52)
こんにちは、以下のような、テキストファイルに入ったテーブルを読み込もうとしています。区切り文字は1文字以上の空白で、-1.#INDは不定値なのでNAと読ませたいと考えています。1 2 3 4 5 11 12 13 -1.#IND 15これを、
tt<-read.table("hoge.txt")で読み込もうとすると
'2' 行目には,5 個の要素がありませんというエラーが出ます。どうも2行目の4個目の要素の-1.#INDの#をコメントの始まりと解釈してそのあとを読まないようです。そこで、今度は、
tt<-read.table("hoge.txt",sep=" ")とすると、今度は、1行目の1個目と2個目の要素の間の2個の空白が、2個区切り文字がありその間に、空の要素があると判断されて、1行目は6個の要素があると判断され、
'2' 行目には,6 個の要素がありませんとエラーが出ます。何とか、1文字以上の連続した空白を1個の区切り文字と判断させて、-1.#INDをNAと判断して読み込む方法はありませんでしょうか?
> x <- read.csv("foo.dat", header=FALSE, sep=" ", na.strings="-1.#IND") > x V1 V2 V3 V4 V5 1 1 2 3 4 5 2 11 12 13 NA 15
> x <- read.table("foo.dat", sep=" ", na.string="-1.#IND", comment.char="")
> x <- read.csv("foo.dat", header=FALSE, sep=" ", na.strings="-1.#IND") > x V1 V2 V3 V4 V5 V6 1 1 NA 2 3 4 5 2 11 12 13 NA 15 NAとなってしまい、意図した結果になりません。もう少しご教授をお願いします。 -- tt 2007-04-07 (土) 20:47:13
sep the field separator character. Values on each line of the file are separated by this character. If sep = "" (the default for read.table) the separator is “white space”, that is one or more spaces, tabs, newlines or carriage returns. ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー > read.csv("foo.dat", header=FALSE, sep="", na.strings="-1.#IND") V1 V2 V3 V4 V5 1 1 2 3 4 5 2 11 12 13 NA 15
> x0 <- scan("temp.txt", what=character(1)) Read 10 items > x0 [1] "1" "2" "3" "4" "5" "11" "12" [8] "13" "-1.#IND" "15" > x1 <- gsub(".+#.+", "NA", x0) > x1 [1] "1" "2" "3" "4" "5" "11" "12" "13" "NA" "15" > x2 <- as.numeric(x1) # 直後のコメントとからもわかるようにここは単に as.numeric(x0) で可 > x2 [1] 1 2 3 4 5 11 12 13 NA 15 > x3 <- matrix(x2, ncol=5, by=TRUE) > x3 [,1] [,2] [,3] [,4] [,5] [1,] 1 2 3 4 5 [2,] 11 12 13 NA 15 > x4 <- as.data.frame(x3) > x4 V1 V2 V3 V4 V5 1 1 2 3 4 5 2 11 12 13 NA 15
> x <- read.csv("foo.dat", header=FALSE, sep="", as.is=TRUE) > y <- as.data.frame(matrix(as.numeric(unlist(x)), nrow(x))) Warning message: 強制変換により NA が生成されました > y V1 V2 V3 V4 V5 1 1 2 3 4 5 2 11 12 13 NA 15無意味な空行はインデントを狂わすのでご注意
tyamada (2007-04-06 (金) 18:13:53)
教えてください。Rのパッケージ(たとえば、vegan)をインストールしたいと思っています。
使っているのはR2.4.1 OSはビスタです。
chooseCRANmirror()
と打って、適当なミラーを選択し(日本の3つとも試しました)
install.packages(c("vegan"))
と打ちますと、はじめは調子よくいっているように見えるのですが、少しすると
URL 'ftp://ftp.u-aizu.ac.jp/pub/lang/R/CRAN/bin/windows/contrib/2.4/vegan_1.8-5.zip' を試しています
ftp data connection made, file length 1176434 bytes
開かれた URL
downloaded 1148Kb
以下にエラーzip.unpack(pkg, tmpDir) : ファイル 'C:/Program Files/R/R-2.4.1/library/file7bb9902/vegan/chtml/vegan.chm' を開くことができません
などというメッセージが返されて、止まってしまいます。
また、ローカルにあるZIPファイルからのインストールでも、同じエラーメッセージが返されてしまいます。
どこが間違っているのでしょうか?教えてください。
cam (2007-04-02 (月) 11:33:16)
Rではsave関数でXDR形式のバイナリデータを作ることができますが、データをこのXDRファイルで保存しておく場合と、csvのようなテキストで保存しておく場合と、色々あると思います。
データファイルを読み込む時に、まずはファイル名からこのファイルがXDRなのか、テキストなのかを判別して処理を切り替えたいのですが、ファイルタイプを識別できるような方法はありますでしょうか?
> system("file test.XDR") test.XDR: gzip compressed data, from Unix > system("file test.data") test.data: UTF-8 Unicode text
akiba (2007-03-31 (土) 21:40:55)
http://cran.md.tsukuba.ac.jp/から、R-2.4.1-win32.exeをインストールしたのですが、作業スペース上の日本語が文字化けしてしまっています。
文字化け部分をテキストに貼り付けると日本語としてちゃんと表示されます。
どうすれば、文字化けを直すことができるでしょうか。
ご教示をお願いします。
奥井正俊 (2007-03-29 (木) 13:02:38)
Rをインストールしたのちに、パッケージのインストールを試みましたが、つながりません。「以下にエラーopen.connection(file,"r"):コネクションを開くことができません 追加情報:Warning message:'cran.r-project.org'をポート80でコネクトできません」と出ます。どうすればよいのかご教示をよろしくお願いします。
nick (2007-03-28 (水) 19:52:19)
Rのプロットで,y軸の主軸,2軸の設定は可能でしょうか?
色々調べたのですが,わかりません。
どなたかご存知の方お願いします。
内藤 (2007-03-28 (水) 15:41:16)
Rの初心者です。
プロットしたいデータが10000行あって,行を100行おきとかに読み飛ばしたいのですが,何かコマンドみたいなものはあるのでしょうか?
gnuplotでいうとevery 100みたいな。
以上,どうぞよろしくお願いします。
norion (2007-03-27 (火) 23:56:46)
他で作った表をRに読み込んで作業しようとしています。表全体の読み込みはできました。
行列の1列目には色々な名前が書いてあるんですが、この中からひとつの名前を指定し
指定した名前に1列目が該当している行の全ての列を取り出したいのです。
どのような関数を書けばそれが可能でしょうか。
不適切な質問だったらすみません。
> M # 行、列ラベルつき行列 C1 C2 C3 R1 1 4 7 R2 2 5 8 R3 3 6 9 > M[,"C2"] # 列ラベルで第二列を取り出す R1 R2 R3 4 5 6 > M["R2",] # 行ラベルで第二行を取り出す C1 C2 C3 2 5 8 > str(M) # 行列なら次のように表示されるはず int [1:3, 1:3] 1 2 3 4 5 6 7 8 9 - attr(*, "dimnames")=List of 2 ..$ : chr [1:3] "R1" "R2" "R3" ..$ : chr [1:3] "C1" "C2" "C3" > str(M) # データフレームなら次のように表示されるはず `data.frame': 3 obs. of 3 variables: $ C1: int 1 2 3 $ C2: int 4 5 6 $ C3: int 7 8 9
> A [,1] [,2] [,3] [1,] "a" "1" "7" [2,] "b" "2" "8" [3,] "c" "3" "9" [4,] "b" "4" "10" [5,] "c" "5" "11" [6,] "a" "6" "12" > A[A[,1]=="b",] [,1] [,2] [,3] [1,] "b" "2" "8" [2,] "b" "4" "10"こんな感じでいいのでは? -- g 2007-03-28 (水) 10:46:12
sunny (2007-03-26 (月) 23:01:23)
初めて書き込みします。
Rを使い始めてわずかの、全くの初心者です。
barplotと入れても、表示をしてくれなくなってしまいました。
どうやら、何かの弾みにbarplot関数が壊れてしまったようです。
壊れた関数を再設定するにはどうしたらよいのでしょう。
のっち (2007-03-23 (金) 00:45:59)
目的としては、CPUの負荷傾向を日々のCPU負荷状態(%)およびJOB稼働係数からグラフ化をしたいと思っております。
Rを入れて色々と調べているのですが、10, 20,30... といったY軸の刻み指定と任意の刻みでの目盛線の引き方が分かりません。
教えて君で申し訳ありませんが、ヒントなどいただけませんでしょうか。
plot(1:10, runif(10)*100, ylim = c(0, 100));abline(h=c(10,20,30,40,50,60,70,80,90), lty="dotted")で意図する刻みでの線が引けました。ありがとうございます。ただ、axisでX軸の刻みは指定出来るようですが、Y軸にも使えるんでしょうか? -- のっち 2007-03-26 (月) 00:51:39
X Jr. (2007-03-21 (水) 21:22:39)
例えば、y <- 1:10/2; plot(1:10, y); text(1:10, y, y, pos = 1)とすると、小数以下が0のものは整数部分のみが表示されますが、".0" も表示させたいときはどのようにすれば良いのでしょうか? よろしくお願いいたします。
y <- 1:10/2; plot(1:10, y); text(1:10, y, format(y, nsmall = 1), pos = 1)でできました。ありがとうございました。-- X Jr. 2007-03-21 (水) 22:13:05
myuhe (2007-03-14 (水) 18:55:45)
はじめまして。Rのド素人です。次のことについて、ご教示いただければ幸いです。
nls()を実行すると、例えば次のような結果が得られますNonlinear regression model model: inverseHeight ~ 1/(A * DBH^B) + 1/C data: testtrees A B C 0.2689986 3.1630292 24.6279807 residual sum-of-squares: 0.0003014474この中の回帰係数(上の例では、0.2689986 3.1630292 24.6279807)を利用して、続けて処理を行いたいと考えています。
続けて行いたい処理は、出力された回帰係数で任意の独立変数の値の時の従属変数の値を連続して取得していくというものです。独立変数は、あくまで任意です。
最初は、この結果をデータフレーム等に変換して、そこから回帰係数を取得しようと考えていたのですが、出力結果は独自のオブジェクトのようで変換できませんでした。
predict()を使った方法も検討しましたが、任意の独立変数の値をうまく指定することができませんでした。
初歩的なものかもしれませんが、よろしくお願いします。
as.vector(hoge$m$getAllPars())
ADMET modeler (2007-03-09 (金) 15:37:11)
こんにちは。初めて投稿します。超初心者で非常に基本的な質問で恐縮なのですが、教えてもらえるとうれしいです。
仕事の関係で判別予測モデル(手法としてはBayesian, Random Forest, Support Vector Machineなどです)を作成して利用しようと考えているのですが、一旦作成したモデルを保存する方法がわかりません。
たとえば、Random Forestの場合、hlm <- read.csv('C:/work/data.csv',head=TRUE) trainset <- hlm[1:1952,] testset <- hlm[1953:2439,] model <- randomForest(Class ~ ., data = trainset)というふうにモデルを作成して、
そのままpredictすると別のデータを予測できますよね。pred <- predict(model, testset)しかし、できればここで作成したモデルを保存しておいて、後日呼び出して再び使いたいのです。もちろん、その際にもう一度モデルを作成しなおしてもいいのですが、データが多いのでモデル作成に時間がかかってしまいます。
この例では、Random Forestですが、一般的な回帰モデルなども含めて一度作成した「モデル」を保存・読み込みをするにはどのように行うか教えてください。
きゃらっと (2007-03-08 (木) 08:31:34)
初めて投稿させていただきます.初心者です.
(1:3)が(1,2,3)やとなる変換の逆を行わせる方法を教えてください.
例
(1,2,...100, 250,251,...500, 10001, 10002,... 10005)
変換後
(1:100, 250:500,10001:10005)
よろしくお願いします.
vecpack<-function(x) { S<-x[-1] E<-x[-length(x)] TF<-E-S!=-1 s<-c(x[1],S[TF]) e<-c(E[TF],x[length(x)]) myfun<-function(x) { if(s[x]==e[x]) as.character(s[x]) else paste(as.character(s[x]),as.character(e[x]),sep=":") } vlist<-lapply(1:length(s),myfun) paste("c(",paste(vlist,collapse=","),")") }早速付け加えてくれたようですね
> set.seed(836478) > ( x <- unique(sort(sample(100, 90, replace=TRUE))) ) # テストデータ [1] 2 3 5 6 7 8 12 14 15 16 18 19 20 24 28 29 30 31 33 35 36 37 38 39 [25] 40 42 45 49 50 52 53 54 55 59 61 62 63 65 66 68 69 70 71 72 73 74 77 80 [49] 82 83 84 86 88 90 91 92 93 97 98 99 > n <- length(x) # ベクトルの長さ > s <- c(TRUE, x[-n]+1 != x[-1]) # 新しいシークエンスが始まると TRUE を持つベクトル > res <- "" # 結果を得る文字列 > for (i in 1:n) { # いやらしいループで + if (s[i]) { # 新しいシークエンスが始まると文字列に「, 整数値」を加える + res <- paste(res, x[i], sep=", ") + last <- x[i] # 最後に加えた整数値を覚えておく + } + if (i < n) { # シークエンスが終わるときは文字列に「:整数値」を加える + if (s[i+1] && x[i] != last) { # ただし,k:k のようなのは避ける + res <- paste(res, x[i], sep=":") + } + } + else if (x[i] != last) { # 最後の要素の処理 + res <- paste(res, x[i], sep=":") + } + } + res <- paste(res, ")") # 最後に「)」を付けて > ( res <- sub(",", "c(", res) ) # 先頭が「,」で始まるので,「c(」で置き換える [1] "c( 2:3, 5:8, 12, 14:16, 18:20, 24, 28:31, 33, 35:40, 42, 45, 49:50, 52:55, 59, 61:63, 65:66, 68:74, 77, 80, 82:84, 86, 88, 90:93, 97:99)"vecpack の vlist lapply を使わなくてもできるので,より分かりやすくなる
vecpack2 <- function(x) { S <- x[-1] E <- x[-length(x)] TF <- E-S != -1 s <- c(x[1], S[TF]) e <- c(E[TF], x[length(x)]) vlist <- ifelse(s==e, s, paste(s, e, sep=":")) # これだけで O.K. paste("c(",paste(vlist,collapse=","),")") }巧い!
vecpack3 <- function(x) { s <- x[c(TRUE, x[-n]+1 != x[-1])] e <- x[c(x[-n]+1 != x[-1], TRUE)] return(paste("c(",paste(ifelse(s == e, s, paste(s, e, sep=":")), collapse=","),")")) }マイナーな修正ですが,未定義の n とスペースを除いて
vecpack4 <- function(x) { s <- x[c(TRUE, x[-length(x)]+1 != x[-1])] e <- x[c(x[-length(x)]+1 != x[-1], TRUE)] return(paste("c(",paste(ifelse(s == e, s, paste(s, e, sep=":")), collapse=","),")", sep="")) }
ちゃい (2007-03-05 (月) 21:56:05)
Rで実験計画法ができるのでしょうか
藤巻十三 (2007-02-28 (水) 17:52:22)
こんにちは。
表題の一様関数の積分は例えで、具体的にやりたいことは他にあるのですが、例として簡単なので取り上げさせて頂きたくお願い申し上げます。f<-function(x) 1 integrate(f=f,lower=0,upper=1)とすると答えとして「1」を期待したいところでしたが、
以下にエラーintegrate(f = f, lower = 0, upper = 1) : evaluation of function gave a result of wrong lengthとなります。この原因と回避する方法を教えて頂けませんか?
尚、「f<-function(x) ceiling(x)」なら答えは1が返ってきますが、
「f<-function(x) max(x,1)」では駄目です。
生物系大学院生 (2007-02-26 (月) 06:11:57)
こんにちは、初めて質問させていただきます。
下記のようにして作成したブートストラップデータのリスト(z)内の各ベクトルから、特定の要素のみを抽出するいい方法をご存知ないでしょうか?> x<-c(1:100) > y<-function(){sample(x,100,replace=TRUE)} > z<-lapply(1:100,function(i)try(y()))塩基配列データに基づくパラメータの推定値の分散をブートストラップ法で求めたいと考えています(式は100塩基座の100回のブートストラップ試行の場合です)。推定するパラメータの性質上、情報をもつ特定の塩基座(informative site;例えば1〜10)がそれぞれ何回各ブートストラップの試行で利用されたかが重要になってくるため、それだけを抽出したいと考えています。
各ベクトルについては、> z[[1]][z[[1]]<11]として11未満の数字のみを抜き出す方法や、
> sort(z[[1]])として先頭にinformative siteを集める方法にはたどり着いたのですが、これをリスト全体に適用する方法が分かりませんでした。
どなたかいい方法をご存知ないでしょうか?
> z <- lapply(1:100, function(i) sample(1:100, 100, rep=TRUE)) > A <- list(rep(NULL,100)) # 空リスト > for (i in 1:100) A[[i]] <- z[[i]][z[[i]] < 11] > B <- lapply(1:100, function(i) z[[i]][z[[i]] < 11]) > identical(A, B) [1] TRUE
もも (2007-02-24 (土) 17:27:16)
単発の質問で申し訳ないのですが
陰関数を表示する関数、あるいはパッケージをご存知の方教えてくださいませ。
Y.Takenaka (2007-02-18 (日) 16:52:55)
mt19937の乱数の改良版が発表されていましたので、ラッパーを作った。そこでわからない事にぶち当たりました。altivecやsse2といったものにも対応しているんですが、対応させる方法がわかりません(コンパイルオプションを付ける方法です。R cmd SHLIB ファイル オプション?)もしよろしければ教えていただけませんか?情報が載ってる先がわかるだけでも助かります。
altivecやsse2と行ったものに対応していないものでは使えるようになったのです。公開してます。
http://sun.s167.xrea.com/Archives/HomePage.html (r_sfmt19937.cです。)
R CMD COMPILE CFLAGS=-msse2 a.c b.c c.c R CMD SHLIB -o abc.so a.o b.o c.oこんな感じになります.
R CMD COMPILE -h R CMD SHLIB -hを見てください.-- なかま 2007-02-18 (日) 19:05:28
千成 (2007-02-16 (金) 13:17:45)
ARモデルの自己回帰係数の算出方法として、
Yule-Walker法、最小二乗法、最尤法、Burg法などがありますが、何故デフォルトではYule-Walker法が選択されているのでしょうか?
Yule-Walker法が他の方法に比べてどの点で秀でているのでしょうか?
助言をお願い致します。
廣瀬_敏之 (2007-02-15 (木) 02:16:56)
次のような結果をどう考えればいいのでしょう? 98-BASICの整数の割り算の結果とあまりに違うのでとまどっています。 どちらが正しいか、という問題でない事はわかっていますし、整数部をとったり、切捨てなら専用の関数があることも知っていますが、それでも初心者にはとまどう『出来事』です。 各々のround(x,0)をとってから割り算をしていると考えても少しおかしいし・・・? この計算の定義までマニュアルに書いてあったでしょうか? いわゆる『R言語のマニュアル』と、過去の『初心者向けQ&A』に対する検索で『整数』『割り算』『除算』では、目的とする内容がヒットしないようなので、せめてキーワードだけでも教えてください。多分、私の探し方が足りないと思うので・・・(礼)。 使用環境はDOS/V系のパソコンで、『XP』と『Vista』で同じでした。それとR version 2.2.0, 2005-10-06, i386-pc-mingw32 attached base packages: [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" [7] "base"です。本当は複数のバージョンでチェックすべきなのでしょうが、『R』の使用環境が変わっては困るので、そこまではご勘弁を。
なお『R』自体のソースコードをどうぞ、と言われましても、『C』は読めません。> -2.3%/%1 [1] -3 > test<-c(-5.99999,-5.00001,5.00001,5.99999) > test%/%1 [1] -6 -6 5 5 > test%/%2 [1] -3 -3 2 2 > test%/%2.5 [1] -3 -3 2 2 > test%/%2.2 [1] -3 -3 2 2 > test%/%2.7 [1] -3 -2 1 2 > test%/%-1 [1] 5 5 -6 -6 > test%/%-2 [1] 2 2 -3 -3 > test%/%-2.5 [1] 2 2 -3 -3 > test%/%-2.2 [1] 2 2 -3 -3 > test%/%-2.7 [1] 2 1 -2 -2
kokko (2007-02-14 (水) 18:22:11)
x <- 1:5 y <- c(100,1000,10000,100000,1000000) plot(x,y, log="y", xlab="X_num", ylab="Y_num", las=1)こんにちは。このようにy軸を対数目盛にしたグラフを作製したいのですが、y軸のラベル "Y_num"を時計回りに45°回転させてx軸と平行にし、さらに目盛りの数値と重ならないようにしたいです。
また目盛りの値が "1 e+05" のように1とeの間にスペースが入ってしまい、このスペースを消したいのですがどのようにすればよいでしょうか?
どなたかよろしくお願いします。
X Jr. (2007-02-03 (土) 21:31:51)
R-2.4.0以降のWindows版で、インストール時にヘルプの表示形式(テキスト, chm, HTML)を選択できますが、これをインストール後に変更する方法を教えて頂けますでしょうか。
ウィリアム (2007-02-02 (金) 07:57:57)
Wilcoxon signed rank test を行おうと思いましたが、同じ値がありましたので Exact Wilcoxon signed rank test を行いました。 小さなデータセットで試してみたところ P 値が 1 より大きくなりました。> wilcox.exact(c(8,8,-5,-10)) Exact Wilcoxon signed rank test data: c(8, 8, -5, -10) V = 5, p-value = 1.125 alternative hypothesis: true mu is not equal to 0P 値が 1 より大きくなってよいのですか?
szk (2007-02-01 (木) 09:03:07)
以下のエラーを解決する方法をお尋ね申し上げます。> dist(rnorm(560327)) 以下にエラーvector("double", length) : 指定されたベクトルのサイズが長すぎます以下は正常に計算されます。
> dist(rnorm(560327)[1:10])