初心者のための R および RjpWiki に関する質問コーナー
新規投稿はできません。
お恥ずかしい (2007-01-31 (水) 02:23:49)
> 一度、自分で検証して、検索して、頭を整理して、みんなにわかりやすく質問した方が良いと思いますよ。投稿法も。 -- 2007-01-31 (水) 05:47:26
ご迷惑おかけしました。
質問を整理します。
(1)数値型から因子型への変更は,下記のご教示の通りです。幼稚な質問をしてしまいお詫びします。色々ありがとうございました。
> factor(x)としたって,それを変数に付値しないと結果は保存されないでしょう。z$X <- factor(z$X) とやってみてくださいな。
> データといえど,全角数字を使うのは好ましくない。2番目のsumary の結果の X と Y の数字のフォントの違いに注意。 -- 2007-01-31 (水) 08:43:01> x <- c(1,2,3,4,5) > y <- c("1","2","3","4","5") > z <- data.frame(X=x,Y=y) > summary(z) X Y Min. :1 1:1 1st Qu.:2 2:1 Median :3 3:1 Mean :3 4:1 3rd Qu.:4 5:1 Max. :5 > z$X <- factor(z$X) > summary(z) X Y 1:1 1:1 2:1 2:1 3:1 3:1 4:1 4:1 5:1 5:1(2)
> x <- c(1,2,3,4,5) > y <- c("1","2","3","4","5") > z <- data.frame(X=x,Y=y)の段階で, edit(z) としてデータエディタを出し,xの列の属性をnumericからcharacterに変えても反映しないのですが,操作を間違えているでしょうか;
(3)
> 外部データのハンドリングが良くないということはないでしょう。あなたが,よく理解していないからではないかと思います。具体的理由なしに,そのような判断を提示されるのはいかがなものかと思いますよ。
すみません。CSVファイルから読み込むときにたとえデータが半角英数字であっても,「この列はカテゴリーで読む」とかの指定があったらいいのになぁ,と思ったのです。
ファイルtest.table (CSV ファイルということだから) height, weight, sex No1, 168, 63, 1 No2, 172, 75, 1 No3, 170, 60, 2 > x <- read.csv("test.table", colClasses=c("character","numeric","numeric","factor"), header=TRUE) > x height weight sex No1 168 63 1 No2 172 75 1 No3 170 60 2 > str(x) `data.frame': 3 obs. of 3 variables: $ height: num 168 172 170 $ weight: num 63 75 60 $ sex : Factor w/ 2 levels " 1"," 2": 1 1 2
mu (2007-01-26 (金) 01:44:56)
はじめまして.
判別分析の勉強をしているものです.
関数lda()を用いれば線形判別係数を求められますが, 関数qda()を用いたときも係数は求められるのでしょうか. ご存知の方いらっしゃいましたらご教授お願いいたします.
> library(MASS) > ? qda > ? predict.qda > example(qda)
R初心者X (2007-01-24 (水) 15:39:40)
こんにちは.初歩的な質問で失礼致します.
R2.4.1を新たにインストールして,次のデータセットを実行しました.d <- c(0:100) v1 <- 10000 * exp(-0.05*d) pdf(file="c:/test.pdf") plot (d,v1,xlab="時間", ylab="価値", main="", sub="指数関数", pch=22, ylim=c(0, 10000), type="l", lwd=2) dev.off()しかし,PDFファイルに出力しようとすると,
Warning messages: 1: font width unknown for character 0x90 2: font width unknown for character 0x90 3: font width unknown for character 0x90 4: font width unknown for character 0x90という警告が出て,日本語で表記した部分が文字化けしたものがPDFファイルに出力されました.もし,お心当たりの方がいらっしゃいましたら,対処法について,ご教示頂ければ幸いです.
なお,R2.4.1はこのWikiを通じてダウンロードしたものです.
起動時の初期画面の文字化けは,Rconsole, Rdevga, Rprofile.siteの3つのファイルを上書きすることによって解消されましたが,PDFファイルの日本語部分は文字化けするようです.お忙しいところ,恐縮ですが,以上,宜しくお願い申し上げます.
pdf(file="c:/test.pdf",family="Japan1") plot (d,v1,xlab="時間", ylab="価値", main="", sub="指数関数", pch=22, ylim=c(0, 10000), type="l", lwd=2) dev.off()familyの引数については、?postscriptFontsで。
R初心者 (2007-01-24 (水) 06:57:46)
大変、初歩的な質問ですみません。
データを別のデータに保存する際、データ名の変更を簡単にするために数字さえ変更すればよい、という感じにしたいです。
イメージですが、下の例ですと、コンソール画面で"ver_2"と打てば"1 2 3 4 5"と表示されるようにしたいです。どのようにすればよいでしょうか?
重ね重ね、初歩的な質問ですみません。data<-c(1,2,3,4,5) ver_num<-2 ver_ver_num<-data
> ver <- list(NULL) > ver_no <- 0 > ver[[ver_no <- ver_no + 1]] <- 1:5 > ver[[ver_no <- ver_no + 1]] <- matrix(1:4, 2,2) > ver[[ver_no <- ver_no + 1]] <- letters[1:5] > ver [[1]] [1] 1 2 3 4 5 [[2]] [,1] [,2] [1,] 1 3 [2,] 2 4 [[3]] [1] "a" "b" "c" "d" "e" > ver[[1]] [1] 1 2 3 4 5 > ver[[2]] [,1] [,2] [1,] 1 3 [2,] 2 4 > ver[[3]] [1] "a" "b" "c" "d" "e"もしどうしても ver_2 などという命名法がお気に入りなら、次のような関数を用意してつかう。変数は大局的環境中の変数になります。
> foo <- function(var_name, ver_no, data) { nam <- paste(var_name, "_", ver_no, sep="") assign(nam,data,env=.GlobalEnv) } > foo("ver", 1, 1:5); ver_1 [1] 1 2 3 4 5 > foo("ver", 2, matrix(1:4,2,2)); ver_2 [,1] [,2] [1,] 1 3 [2,] 2 4 > foo("ver", 3, letters[1:5]); ver_3 [1] "a" "b" "c" "d" "e" > foo("another.ver", 1, 1:5); another.ver_1 [1] 1 2 3 4 5
> x<-9 > x [1] 9 > if(x<-1) print("x is less than -1 ??") [1] "x is less than -1 ??" > x [1] 1
学生 (2007-01-22 (月) 14:29:30)
こんちには。行列の解析をしています。外部で作成した行列ファイルをRに読み込ませる時に これまでは、事前に行列の形にしてRに読み込ませていました。 ただ、行列情報を普段はbinary relationの形で持っているので、 Rにこのまま読ませて、R内部で行列に変換するとういうことが したいのですが、どのようにすればよいでしょうか?>binary relation 形式 A<tab>B<tab>0 A<tab>C<tab>1 B<tab>C<tab>2 >matrix 形式 A B C A 1 0 1 B 0 1 2 C 1 2 1
> x <- scan("/tmp/test.data", what=list(character(0), character(0), double(0)), sep="?t") Read 3 records > x [[1]] [1] "A" "A" "B" [[2]] [1] "B" "C" "C" [[3]] [1] 0 1 2 > mat <- matrix(1, 3,3, dimnames=list(c("A","B","C"), c("A","B","C"))) # 永続付値演算子 <<- の使用に注意 > lapply(1:3, function(i) mat[x[[1]][i], x[[2]][i]] <<- mat[x[[2]][i], x[[1]][i]] <<- x[[3]][i]) > mat A B C A 1 0 1 B 0 1 2 C 1 2 1
> d<-read.table("filename.tsv",as.is=T) > n<-sort(unique(c(d[,1:2],recursive=T))) > r<-matrix(1,length(n),length(n),dim=list(n,n)) > for(i in 1:dim(d)[1])r[d[i,1],d[i,2]]<-r[d[i,2],d[i,1]]<-d[i,3] > r A B C A 1 0 1 B 0 1 2 C 1 2 1
> df <- read.table("test.dat", header=FALSE, as.is=TRUE) > df V1 V2 V3 1 A B 0 2 A C 1 3 B C 2 > # A, B, C,... を 1, 2, 3, ... に変換する関数 > sufix <- function(x) sapply(x, function(L) which(LETTERS==L)) > > # 行列のサイズ n を自動で計算 > n <- which(LETTERS==rev(names(table(c(df[,1], df[,2]))))[1]) > x <-diag(n) # 対角行列を作る > suf <- cbind(sufix(df[,1]), sufix(df[,2])) # 添え字行列を作る > x[suf] <- df[,3] # 該当する要素位置に数値を格納 > x <- x+t(x) # 下三角行列にコピーして > diag(x) <- 1 # 対角成分は1にする > colnames(x) <- rownames(x) <- LETTERS[1:n] # 名前を付けて完成 > x A B C A 1 0 1 B 0 1 2 C 1 2 1
moriuchi (2007-01-21 (日) 01:12:29)
はじめまして。
花形質が適応度に与える影響を調べています。
各個体ごとに、花弁長(X)および、雌しべ長(Y)を計測し、
適応度としては種子数(Z)を用います。
図としては、X軸に花弁長、Y軸に雌しべ長をとり、
適応度の高低を等高線図で示せないかと考えています。
contour()関数を使用すればよいのかと思うのですが、
どのように記述すれば、このような図を描けるのでしょうか?
初歩的質問で申し訳ないのですが、ご教授いただけないでしょうか。
> df <- structure(list(x = c(0.3, 0.4, 0.5, 0.7, 1, 1.4, 1.5, 1.6, 2, + 2.1, 2.5, 2.7, 3, 3.2, 3.3), y = c(1.3, 1.4, 1.5, 1.8, 2, 2.3, + 2.5, 2.7, 3, 3.1, 3.5, 3.6, 4, 4.2, 4.5), z = c(324, 167, 90, + 23, 7, 2, 2, 1, 1, 1, 2, 2, 7, 18, 51)), .Names = c("x", "y", + "z"), row.names = 1:15, class = "data.frame") > ans <- nls(z~exp((x-a)^2+(y-b)^2), df, start=list(a=2, b=3)) > a <- ans$m$getPars()[1] > b <- ans$m$getPars()[2] > cat("a=", a, " b=", b, "?n") a= 1.982297 b= 3.01758 > x <- seq(0,4,length=100) > y <- seq(1, 5, length=100) > z <- outer(x, y, function(xi, yj) exp((xi-a)^2+(yj-b)^2)) > contour(x, y, z, levels=c(1.1, 2, 5, 10, 100, 1000))
> library(akima) > xdata <- runif(30); ydata <- runif(30); zdata <- rnorm(30)+0.2*xdata^2-0.5*xdata*ydata+0.9*ydata^2 # 例示用人工データ > data <- data.frame(x=xdata, y=ydata, z=zdata) > with(data, contour(interp(x,y,z)))
初心者 (2007-01-20 (土) 12:38:21)
FORTRAN言語をR言語に取り込む機能はあるのでしょうか。
もしご存知の方いましたらご教授お願いしたします。
Maerklin (2007-01-17 (水) 01:44:31)
Windows Vistaがそろそろリリースされますが、Windowsの64ビット用のR言語バイナリは出るのでしょうか?
matuo (2007-01-16 (火) 17:40:17)
3次元レーザスキャナで取得した30種の物体の形状データを、線形判別分析で判別させようとしています。
形状データを一定の方向からの距離画像に変換し、その画像のそれぞれの画素の値を変数としていて、 変数が1176個、データ数が1種30枚の計900あるデータフレームを学習データとしています。data.lda <- lda(train.data, label) #labelはtrain.dataに対応するラベルと実行すると、
以下にエラーsprintf(ngettext(length(const), "variable %d appears to be constant within groups", : 文字オブジェクトには %s 書式を使ってくださいとエラーが出てしまいます。
レーザスキャナで物体データの取得がされなかった点は距離画像での値が0になり、 画像の端にあたるデータが定数変数になっているのですが、 ldaに渡すデータに定数変数が含まれているとエラーが出力されるようです。
手動でそういった変数を取り除くと上手く判別されるのですが、 常に画像の全く同じ場所に物体データがあるとは限らず応用性に欠けます。
関数内部で定数変数の処理を行うことは出来ないのでしょうか。
variables are collinear in: lda.default(x, grouping, ...)実に簡単なことです。以下のようなプログラムを実行すると,全く同じ値が入っている第3列が削除されているのが確認できるでしょう。
x <- matrix(rnorm(900*1176), 900) colnames(x) <- paste("V", 1:1176, sep="") x[,3] <- 777 x <- x[,apply(x, 2, var) != 0] # 必要なのはこれだけ! x[1:10, 1:5]
サンダース (2007-01-16 (火) 10:41:40)
library(KernSmooth)の中に、bkde2Dという関数があり、その関数の中身を
print(bkde2D)で見てみました。
すると、その関数の中でlinbin2Dという関数が使われていたのですが、この関数の中身を見ようとヘルプやらネットで検索してみましたが、どうしても見ることが出来ません
また、このlinbin2Dという関数を使おうとしても、関数 "linbin2D" を見つけることができませんでしたとなって、使う事が出来ません
どうすればこの関数を利用できるのでしょうか?誰か分かる方がいれば教えてください、お願いします
KernSmooth:::linbin2D
sarita (2007-01-16 (火) 07:14:20)
超初心者です。sampleという関数の使い方がわかりません。sample=runif(75,min=-100,max=0)とすると、ランダムに75個の数字が出てくるわけなんですが、データファイルの特定の列を指定して、そこからある条件にあったデータをサンプリングする場合、そのデータファイルの指定をどこでしていいのかわかりません。質問の意図がわかっていただけるでしょうか。。。
> sample(1:10, 5) # 1:10 から5個を非復元無作為抽出 [1] 9 10 5 8 3 > sample(1:10, 20, rep=TRUE) # 1:10 から20個を復元無作為抽出 [1] 1 2 6 4 3 7 2 3 7 2 10 1 10 9 10 10 10 5 2 5
初心者を早く卒業したい (2007-01-14 (日) 18:53:11)
下付け文字を含むグラフのタイトルを作りたいのですが、うまくいきません。
環境はMac os 10.48、Rのバージョンは2.31です。
標準のエディタまでは下付け文字の入力ができる(他のエディタからコピペして)のですが、コンソールでは表示がうまくいかずに普通の位置に文字がきてしまいます(グラフも同様です)。
解決法をご存じの方がいらしたらお願いします。
hist(rnorm(1000),main=expression(AA[1]))
> hist(rnorm(1000), main="") > title(main=expression(AA[1]))
rwiki (2007-01-09 (火) 18:47:05)
arima で推定しようとしたら intercept が出てこなかった。なぜ?
leau (2007-01-05 (金) 11:10:03)
昨日はどうもありがとうございました。‘R’入門者ですのでおてやわらかにお願いいたします。
1.デンドログラム最下段の線間隔を広げたいのですが、コマンドの例をご教示ください。
2.デンドログラムの線の太さを小さくしたいのですが、コマンドの例をご教示ください。
leau (2007-01-04 (木) 10:34:38)
クラスター分析で出力されるデンドログラムで、最下段にデータNo.が表示されますが、このときのデータNo.のフォントを小さくするにはどのようにしたらよいのでしょうか。
現状では、データの数が多いと、データNo.が重なり合って判読不能です。
> hc <- hclust(dist(USArrests), "ave") > plot(hc, cex=0.5, col="red")
yoshizaki (2007-01-03 (水) 20:26:11)
独立標本データの分析を行いたいと思っております。
http://aoki2.si.gunma-u.ac.jp/R/two_sample.html
青木先生のページにあるのですが、
男女 血液型 データ数 平均値 標準偏差
男 A
男 B
男 AB
男 O
女 A
女 B
女 AB
女 O
全体
ともう一歩踏み込んで出力をさせたいと思っているのですがうまくいきません。将来的には、群の数をもっと増やして分析したいと思っておりますので、どうかご教授下さい。
リュウ (2007-01-01 (月) 21:18:35)
chisq.test(matrix(c(435,165,265,135),2,2,byrow=T))の結果です
Pearson's Chi-squared test with Yates' continuity correction data: matrix(c(435, 165, 265, 135), 2, 2, byrow = T) X-squared = 4.1716, df = 1, p-value = 0.04111手計算でするとカイ2乗は4.464となります
2,2行列では結果が定義に基づく手計算とずれてしまいます
何故ずれるのかご教授ください よろしくお願いします
R初心者 (2006-12-29 (金) 06:32:09)
The R Bookのp.308で解説されているCalibrationで、表13.23のようなQuintileのテーブルの作り方をご存知のお方はいらっしゃるでしょうか?
ネットでググってみたんですが、ロジスティック回帰モデルに関してこのようなテーブルの作成法を解説しているサイトはありませんでした。
是非ともご教授お願いします。
logisticmodel <- glm(y ~ x, family=binomial, data)と計算した後、その結果(logisticmodel)を利用して、
table(cut(plogis(predict(logisticmodel)), br = c(0,.2,.4,.6,.8,1)), data$頻度)等と入力すると、The R Bookのp.308で解説されているCalibrationに近いテーブルが出力されます。(もっとも本の方は度数ですが)
predict(logisticmodel)の計算で出力される数値はロジスティック曲線の定義域の部分を出力するようです。すなわち、これのままでは確率として用を成さないので、定義に従ってロジスティック累積分布関数に変換してやる必要性が生じます。
plogis(predict(logisticmodel))と出力します。これで確率となるわけです。
cut(データ, br=c(・・・))今回の場合は、『データ』の部分にロジスティック回帰での確率が入り、また、五分位の為、区分けをbr = c(0,.2,.4,.6,.8,1)とします。当然br=以下は別に任意で構いません。
サンプルサイズ (2006-12-28 (木) 01:00:34)
コックス回帰のパワーアナリシスを行ってくれる関数、パッケージはあるのでしょうか?
銀 (2006-12-27 (水) 15:52:43)
R初心者です。
時系列データの処理をする上で、なかなか高速化がうまく行きません(R最適化のTIPSは読みましたが)。
行いたい処理の簡略化したものは以下のようなものです。
目的:ある指定された期間の最大値および最小値をすべての期間で算出
サンプル1
10000個のデータに対して前後15個のデータを含む31個のデータのうち最大値と最小値の計算をすべてのデータに対して(初めと終わりの15個は除く)適応する。#初期値 N=10000 x=diffinv(rnorm(N)) span=15 #関数定義例 test1 <- function(x,span){ n=length(x) span_max=NULL span_min=NULL for(i in (span+1):(n-15)){ temp_data=x[(i-15):(i+15)] span_max[i]=max(temp_data) span_min[i]=min(temp_data) } outdata=cbind(span_max,span_min) } #実行速度のチェック system.time(test1(x,span)) [1] 0.67 0.03 0.72 NA NAといった感じです。
行列を使って少しだけ高速化すると、
サンプル2test2 <- function(x,span){ n=length(x) temp_data=matrix(NA,n,span*2+1) for(i in (span+1):(n-span)){ temp_data[i,]=x[(i-span):(i+span)] } span_max=apply(temp_data,1,max) span_min=apply(temp_data,1,min) outdata=cbind(span_max,span_min) } system.time(test2(x,span)) [1] 0.53 0.03 0.58 NA NAとなります。
しかし、より高速化する必要があり、このプログラムでforループで作成しているような行列を高速に作成する方法を教えて頂けませんでしょうか?
test3 <- function(x,span){ n=length(x) span_max<-span_min<-NULL sapply((span+1):(n-span),function(i){span_max<<-max(x[(i-span):(i+span)]);span_min<<-min(x[(i-span):(i+span)])})
span_max<-c(rep(NA,span),span_max,rep(NA,span)) span_min<-c(rep(NA,span),span_min,rep(NA,span)) outdata=cbind(span_max,span_min) } test4 <- function(x,span){ n=length(x) span_max<-c(rep(NA,span),sapply((span+1):(n-span),function(i)max(x[(i-span):(i+span)])),rep(NA,span)) span_min<-c(rep(NA,span),sapply((span+1):(n-span),function(i)min(x[(i-span):(i+span)])),rep(NA,span)) outdata=cbind(span_max,span_min) } test5 <- function(x,span){ n=length(x) span_max<-span_min<-NULL sapply((span+1):(n-span),function(i){d<-x[(i-span):(i+span)];span_max<<-max(d);span_min<<-min(d)}) span_max<-c(rep(NA,span),span_max,rep(NA,span)) span_min<-c(rep(NA,span),span_min,rep(NA,span)) outdata=cbind(span_max,span_min) } t2<-system.time(test2(x,span)) t3<-system.time(test3(x,span)) t4<-system.time(test4(x,span)) t5<-system.time(test5(x,span)) print(t2) print(t3) print(t4) print(t5)手元のマシンは遅いので
[1] 2.92 0.02 2.97 NA NA [1] 1.46 0.00 1.47 NA NA [1] 1.45 0.00 1.45 NA NA [1] 0.95 0.00 0.97 NA NAという感じでした。
N=10000 x=diffinv(rnorm(N)) span=15 n <- length(x) nn <- (n-15)-(span+1)+1 X <- matrix(sample(1:n, (2*span+1)*nn, rep=TRUE), nn, 2*span+1) testA <- function(x, span){ xx <- matrix(x[X], nn, 2*span+1) resmax <- xx[cbind(1:nn, max.col(xx))] resmin <- xx[cbind(1:nn, max.col(-xx))] cbind(resmax, resmin) } > system.time(testA(x, span)) [1] 0.074 0.014 0.089 0.000 0.000
testI <- function(x,span){ suppressWarnings(XX<-matrix(c(x,rep(NA,span*2+1)),nrow=(length(x)+span*2), ncol=span*2+1)[(span*2+1):(length(x)),]) cbind(XX[cbind(1:dim(XX)[1],max.col(XX))],XX[cbind(1:dim(XX)[1],max.col(-XX))]) } > system.time(testI(x, span)) [1] 0.052 0.008 0.063 0.000 0.000
test5 <- function(x,span){ n=length(x) span_max<-span_min<-NULL sapply((span+1):(n-span), function(i){d<-x[(i-span):(i+span)];span_max<<-max(d);span_min<<-min(d)}) span_max<-c(rep(NA,span),span_max,rep(NA,span)) span_min<-c(rep(NA,span),span_min,rep(NA,span)) outdata=cbind(span_max,span_min) }↓
test5_ver2 <- function(x,span){ n=length(x) span_max<-span_min<-NULL sapply((span+1):(n-span), function(i){d<-x[(i-span):(i+span)];span_max[i]<<- max(d);span_min[i]<<-min(d)}) span_max<-c(span_max,rep(NA,span)) span_min<-c(span_min,rep(NA,span)) outdata=cbind(span_max,span_min) }という感じでよいでしょうか?
> system.time(test5(x,span)) [1] 0.27 0.01 0.28 NA NA > system.time(test5_ver2(x,span)) [1] 0.74 0.00 0.74 NA NAとなってしまいます。
test6 <- function(x,span){ ## 新しいコード n=length(x) ret<-sapply((span+1):(n-span),function(i){d<-x[(i-span):(i+span)];c(max(d),min(d))}) outdata<-cbind(c(rep(NA,span),ret[1,],rep(NA,span)),c(rep(NA,span),ret[2,],rep(NA,span))) } print(system.time(test5(x,span))) print(system.time(test5_ver2(x,span))) print(system.time(test6(x,span))) [1] 0.28 0.01 0.30 NA NA [1] 1.76 0.06 1.84 NA NA [1] 0.18 0.00 0.18 NA NAこんな感じです。
testA_ver2 <- function(x, span){ n <- length(x) nn <- n-2*span X <- suppressWarnings(matrix(1:n,n+1,2*span+1)[1:n,]) xx <- matrix(x[X],n,2*span+1) resmax <- xx[cbind(1:n, max.col(xx))][1:nn] resmin <- xx[cbind(1:n, max.col(-xx))][1:nn] cbind(resmax, resmin) }って感じですかね?
N=50000 x=diffinv(rnorm(N)) span=15 system.time(test1(x, span)) [1] 12.42 3.71 16.16 NA NA system.time(test6(x,span)) [1] 1.09 0.10 1.22 NA NA system.time(testA_ver2(x, span)) [1] 0.29 0.08 0.38 NA NA system.time(testI(x, span)) [1] 0.24 0.03 0.26 NA NAなかまさんのモノはシンプルで非常に早いですね。
> XX [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 7 6 5 4 3 2 1 [2,] 8 7 6 5 4 3 2 [3,] 9 8 7 6 5 4 3 [4,] 10 9 8 7 6 5 4という行列を作ることです。すると例えば x[XX[1,]] は最初に最大最小を求める副時系列 x[7:1] になります。XX を作る中間マジックは、まずベクトル
c(x,rep(NA,2*span+1) = c(1,2,3,4,5,6,7,8,9,10,NA,NA,NA,NA,NA,NA,NA)を作り、R にこれを dim=c(16,7) の行列にせよ、と命令します。すると、R は困って、文句(suppressWarnings 関数はこれを無視)をいいながらもベクトルをリサイクルしながら、せっせと行列に変えていきます。結果は
> X<-matrix(c(x,rep(NA,span*2+1)),nrow=(length(x)+span*2),ncol=span*2+1) Warning message: 行列のデータ長 [17] が行数 [16] を整数で割った、もしくは掛けた値ではありません > X [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 NA NA NA NA NA NA [2,] 2 1 NA NA NA NA NA [3,] 3 2 1 NA NA NA NA [4,] 4 3 2 1 NA NA NA [5,] 5 4 3 2 1 NA NA [6,] 6 5 4 3 2 1 NA [7,] 7 6 5 4 3 2 1 [8,] 8 7 6 5 4 3 2 [9,] 9 8 7 6 5 4 3 [10,] 10 9 8 7 6 5 4 [11,] NA 10 9 8 7 6 5 [12,] NA NA 10 9 8 7 6 [13,] NA NA NA 10 9 8 7 [14,] NA NA NA NA 10 9 8 [15,] NA NA NA NA NA 10 9 [16,] NA NA NA NA NA NA 10となります。ここで不要な行 1:6, 11:16 を捨てれば目的の行列が得られます。お見事。教訓:何とかとリサイクル規則も使いよう。NA 値を使った利点を生かし、まず X を求めてから
XX <- X[complete.cases(X),]としても良かったわけです。
蟹玉 (2006-12-19 (火) 14:56:13)
現在、時系列モデルのひとつであるARモデルを用いて予測を行っていますが、デフォルトであるAIC以外の情報量基準(BICなど)を利用するにはどのように記述すればよいのでしょうか?
ヘルプ[help(ar)]にはAICを使わない方法は書いてありましたが、他の情報量基準の使い方は書かれていませんでした。
ar.yw.default <- function (x, aic = TRUE, order.max = NULL, na.action = na.fail, demean = TRUE, series = NULL, ...) { if(is.null(series)) series <- deparse(substitute(x)) ists <- is.ts(x) x <- na.action(as.ts(x)) if(ists) xtsp <- tsp(x) xfreq <- frequency(x) x <- as.matrix(x) if(!is.numeric(x)) stop("'x' must be numeric") if(any(is.na(x))) stop("NAs in 'x'") nser <- ncol(x) if (demean) { xm <- colMeans(x) x <- sweep(x, 2, xm) } else xm <- rep(0, nser) n.used <- nrow(x) order.max <- if (is.null(order.max)) floor(10 * log10(n.used)) else round(order.max) if (order.max < 1) stop("'order.max' must be >= 1") xacf <- acf(x, type = "covariance", lag.max = order.max, plot = FALSE, demean = demean)$acf if(nser > 1) { ## multivariate case snames <- colnames(x) A <- B <- array(0, dim = c(order.max + 1, nser, nser)) A[1, , ] <- B[1, , ] <- diag(nser) EA <- EB <- xacf[1, , , drop = TRUE] partialacf <- array(dim = c(order.max, nser, nser)) xaic <- numeric(order.max + 1) solve.yw <- function(m) { # Solve Yule-Walker equations with Whittle's # generalization of the Levinson(-Durbin) algorithm betaA <- betaB <- 0 for (i in 0:m) { betaA <- betaA + A[i + 1, , ] %*% xacf[m + 2 - i, , ] betaB <- betaB + B[i + 1, , ] %*% t(xacf[m + 2 - i, , ]) } KA <- -t(qr.solve(t(EB), t(betaA))) KB <- -t(qr.solve(t(EA), t(betaB))) EB <<- (diag(nser) - KB %*% KA) %*% EB EA <<- (diag(nser) - KA %*% KB) %*% EA Aold <- A Bold <- B for (i in 1:(m + 1)) { A[i + 1, , ] <<- Aold[i + 1, , ] + KA %*% Bold[m + 2 - i, , ] B[i + 1, , ] <<- Bold[i + 1, , ] + KB %*% Aold[m + 2 - i, , ] } } cal.aic <- function() { # omits mean params, that is constant adj det <- abs(prod(diag(qr(EA)$qr))) return(n.used * log(det) + 2 * m * nser * nser) } cal.resid <- function() { resid <- array(0, dim = c(n.used - order, nser)) for (i in 0:order) { resid <- resid + x[(order - i + 1):(n.used - i), , drop = FALSE] %*% t(ar[i + 1, , ]) } return(rbind(matrix(NA, order, nser), resid)) } order <- 0 for (m in 0:order.max) { xaic[m + 1] <- cal.aic() if (!aic || xaic[m + 1] == min(xaic[1:(m + 1)])) { ar <- A order <- m var.pred <- EA * n.used/(n.used - nser * (m + 1)) } if (m < order.max) { solve.yw(m) partialacf[m + 1, , ] <- -A[m + 2, , ] } } xaic <- xaic - min(xaic) names(xaic) <- 0:order.max resid <- cal.resid() if(order > 0 ) { ar <- -ar[2:(order + 1), , , drop = FALSE] dimnames(ar) <- list(1:order, snames, snames) } else ar <- array(0, dim=c(0, nser, nser), dimnames=list(NULL, snames, snames)) dimnames(var.pred) <- list(snames, snames) dimnames(partialacf) <- list(1:order.max, snames, snames) colnames(resid) <- colnames(x) } else { ## univariate case r <- as.double(drop(xacf)) z <- .Fortran(stats:::R_eureka, ## ここも変更 as.integer(order.max), r, r, coefs=double(order.max^2), vars=double(order.max), double(order.max)) coefs <- matrix(z$coefs, order.max, order.max) partialacf <- array(diag(coefs), dim=c(order.max, 1, 1)) var.pred <- c(r[1], z$vars) xaic <- n.used * log(var.pred) + 2 * (0:order.max) + 2 * demean ## ここから tmp<-data.frame(order=0:order.max,AIC=xaic) xaic <- n.used * log(var.pred) + log(n.used) * (0:order.max) + 2 * demean tmp$BIC<-xaic print(tmp) ## ここまで xaic <- xaic - min(xaic) names(xaic) <- 0:order.max order <- if (aic) (0:order.max)[xaic == 0] else order.max ar <- if (order > 0) coefs[order, 1:order] else numeric(0) var.pred <- var.pred[order+1] ## Splus compatibility fix var.pred <- var.pred * n.used/(n.used - (order + 1)) if(order > 0) resid <- c(rep(NA, order), embed(x, order+1) %*% c(1, -ar)) else resid <- as.vector(x) if(ists) { attr(resid, "tsp") <- xtsp attr(resid, "class") <- "ts" } } res <- list(order=order, ar=ar, var.pred=var.pred, x.mean = drop(xm), aic = xaic, n.used=n.used, order.max=order.max, partialacf=partialacf, resid=resid, method = "Yule-Walker", series=series, frequency=xfreq, call=match.call()) if(nser == 1 && order > 0) res$asy.var.coef <- solve(toeplitz(drop(xacf)[seq_len(order)]))*var.pred/n.used class(res) <- "ar" res } print(ar(lh)) 実行結果 > source('tmp.r') order AIC BIC 1 0 -56.12519 -56.12519 2 1 -73.43620 -71.56500 3 2 -73.89383 -70.15143 4 3 -74.43186 -68.81825 5 4 -72.94150 -65.45669 6 5 -71.21907 -61.86306 7 6 -69.43864 -58.21144 8 7 -67.96236 -54.86395 9 8 -65.96929 -50.99968 10 9 -65.69066 -48.84985 11 10 -63.69097 -44.97896 12 11 -61.89799 -41.31478 13 12 -59.94707 -37.49266 14 13 -57.97006 -33.64445 15 14 -56.38814 -30.19133 16 15 -56.99202 -28.92400 17 16 -55.08691 -25.14769 Call: ar(x = lh) Coefficients: 1 0.5755 Order selected 1 sigma^2 estimated as 0.2079
高井 (2006-12-16 (土) 09:55:35)
反復測定データの分散分析を考えており,ここを検索したら「Rの統計解析関数Tips」でrep.aovという関数の記述が見つかりました。そこで,CRANのパッケージ,R Site,仲間さんのCRAN Code searchを試してみましたがいずれも検索できませんでした。rep.aovは何処にあるのでしょうか?
S (2006-12-13 (水) 17:42:12)
emacs上でRnwファイルを編集しているのですが、noweb-minor-modeを実行すると、勝手にtex-modeがロードされます。使い慣れたyatex-modeを使いつつ、noweb-modeで楽に編集したいのですが、yatexとnowebを両立した設定例など助言をいただければ幸いです。VineLinux3.2 + emacs-21.3-0vl7 + emacs-ess-5.3.2です。
よろしくお願いします。このWikiのSweave関連ページには目を通しましたが、解決には至りませんでした。
(defun Rnw-mode () "Major mode for editing Sweave(R) source. See `noweb-mode' and `R-mode' for more help." (interactive) (require 'ess-noweb) (noweb-mode 1) (noweb-set-doc-mode 'yatex-mode) (noweb-set-code-mode 'R-mode))とか書いてあります.-- なかま 2006-12-13 (水) 19:52:11
figure (2006-12-13 (水) 15:10:10)
はじめまして。関数の描画についての質問です
(1)H(x) >0で1 x<=0で0の描き方。(line文以外)
(2)円をその半径を超えた領域内に描くとき、consoleにNANを出させないで描く方法?
(3)大きさの違う二つ円を円のなかに円が含まれる場合にmatplotで描く方法?
大変初歩的な質問ですみませんが、よろしくお願いします.
xの条件付きで関数定義をしても、plot()させることができませんでした。
plot.new() polygon(0.5+0.5*sin(2*pi*0:180/180),0.5+0.5*cos(2*pi*0:180/180),col="red",border=F) polygon(0.5+0.25*sin(2*pi*0:180/180),0.5+0.25*cos(2*pi*0:180/180),col="white",border=F)
circle <- function(cx, cy, f, col) { theta <- seq(0, 2*pi, length=400) polygon(cx+f*sin(theta), cy+f*cos(theta), col=col, border=FALSE) } plot.new() circle(0.5, 0.5, 0.5, "red") circle(0.5, 0.5, 0.25, "white")
おやじ (2006-12-12 (火) 17:39:53)
AR()で予測式をつくり、そのAICを$AICで返した時に、最小値が0となっているのですが、これは最小となったAICを基準として差分をとっているんでしょうか?教えてください、お願いします。
Order selection is done by AIC if aic is true. This is problematic, as of the methods here only ar.mle performs true maximum likelihood estimation. The AIC is computed as if the variance estimate were the MLE, omitting the determinant term from the likelihood. Note that this is not the same as the Gaussian likelihood evaluated at the estimated parameter values. In ar.yw the variance matrix of the innovations is computed from the fitted coefficients and the autocovariance of x.と書いてあるのですが,これがあなたの質問の回答なんでしょうかね。 -- 2006-12-12 (火) 17:47:45
学生 (2006-12-12 (火) 11:44:01)
関数hclust()を使って階層的クラスター分析をする際にcutree()関数を使って事前にクラスタ数を指定して個体がどこのクラスターに属するかに関する情報を返してくれますが、これとは別に事前に閾値を設定してその閾値で、クラスター情報を返すにはどうすればよいのでしょうか?
s.y. (2006-12-11 (月) 15:52:15)
皆様、
repeated-measures ANCOVAをRで行うための簡単な方法はありますか。今、具体的に問題に遭遇しているわけではないのですが、自分はRだけでやっていけるのか、それともSPSSを買った方がよいのか、判定するための一助としたいと思っています。よろしくお願い申し上げます。
MU (2006-12-09 (土) 12:38:20)
皆様のお教えをいただけるようにお願い申し上げます.
体重成長の結果を平滑化しようとしています.
使用環境は次の通りです.
PCはWindows XPで、R version 2.2.1. パッケージは methods, stats, graphics, grDevices, utils, datasets, base が入っています.
エクセルから読み込んだマトリックスBWを元に、図を作成しましたそして、RjpWiki アーカイブスの〔Rの基本パッケージ〕中の〔平滑化関数一覧〕の中から「2.2散布図とLoess平滑化の同時プロット」のまねを試みたのですが、predictionのところで「存在しません」とエラーが出てしまいます.
具体的には次の通りです.> BW<- read.delim("clipboard") > x<- BW[,1] > y<- BW[,2] > scatter.smooth(x,y,span=2/3,degree=1,family=c ("symmetric", "gaussian"), xlab=deparse(substitute(x)), ylab=deparse(substitute(y)), ylim=range(y,prediction$y), evaluation=50) 以下にエラーrange(y, prediction$y) : オブジェクト "prediction" は存在しませんこの場合の、解決策を教えていただけないでしょうか.
勉強が足りない状態で、お伺いすることをお許しください.よろしくお願いします.
-0.889 (2006-12-03 (日) 00:13:33)
実行ファイルをダウンロードし、出来たショートカットをクリックすると、変な文字ばかりです。アンインストールをし、再度ダウンロードしたのですが、結果は同じでした。Windowsがいけのいのですか?
それから、マクネマー検定のことですが、不一致の数だけが問題で、一致している数はいくらであろうと問題ないのですか?
Fedore Core5使い (2006-12-02 (土) 16:44:50)
Linux(Fedore Core5)に、「追加パッケージをなんでもかんでも追加する」を参考にして、パッケージをなんでもかんでも追加しようとしたのですが、# 1. CRANから一覧を入手 packs<-CRAN.packages(contriburl=contrib.url("http://cran.md.tsukuba.ac.jp/")) # 2. 一覧をもとにダウンロードとインストール install.packages(packs[,1],contriburl=contrib.url("http://cran.md.tsukuba.ac.jp/"))エラーが出て上手く行きません。。。
(「contriburlは廃止予定です」というエラーは無視してよいと思うのですが)
対処法を教えていただければうれしいのですが。。。
> install.packages("Rcmdr") --- Please select a CRAN mirror for use in this session --- Loading Tcl/Tk interface ... 以下にエラーdyn.load(x, as.logical(local), as.logical(now)) : 共有ライブラリ '/usr/lib/R/library/tcltk/libs/tcltk.so' を読み込めません libtk8.4.so: 共有オブジェクトファイルを開けません: そのようなファイルやディレ クトリはありません エラー:.onLoad は 'tcltk' のための 'loadNamespace' に失敗しましたひとつずつインストールするのが良いようですね。御指導ありがとうございました。-- 2006-12-02 (土) 19:46:49
-0.889をハンドルネームにするのは・・・ (2006-12-02 (土) 10:33:42)
EXCELファイルやACCESSファイルを読み込む際の話ですが、Windows版のRですと、パッケージ「RODBC」のodbcConnectExcel()関数などで読み込むことが出来ますが、MacOSX版Rですと、パッケージ「RODBC」の中にはodbcConnect()関数しかなく、EXCELファイルやACCESSファイルを読み込むことが出来ません・・・。(ちなみに、当方のMacにOffice Macは入っております)CSVファイルなどに落としてread.csv()関数で、という手もあるのでしょうが、これらのファイル形式のデータをodbcConnect()関数などで読み込む方法をどなたかご存知でしたらご教授いただけますでしょうか??
あと、これは興味本位の質問なのですが、Linux版RでEXCELファイルやACCESSファイルを読み込む場合はどうすればよいのでしょう??(Open Office に ODBC ドライバが入っていたりするのでしょうか??)
ご指導よろしくお願い致します。
> library(RODBC) > channel <- odbcConnectExcel("C:/test.xls") > channel RODB Connection 7 Details: case=nochange DBQ=C:?test.xls DefaultDir=C:? Driver={Microsoft Excel Driver (*.xls)} DriverId=790 MaxBufferSize=2048 PageTimeout=5
-0.889 (2006-11-30 (木) 21:57:15)
Rのダウンロードを教えてください。The R projectに行っても実行ファイルがみつかりません。
初心者です (2006-11-22 (水) 23:26:49)
いつもお世話になっています.
共通の横軸を持つプロットを複数積み重ねて描画したいのですが,theta<-seq(-pi,pi,by=0.1) par(mfrow=c(3,1),mar=c(0,4,0,0),oma=c(5,4,4,1)) plot(theta,sin(theta),type="l",xlab="",ylab=expression(sin(theta)),xaxt="n") axis(1,tick=T,labels=F) plot(theta,cos(theta),type="l",xlab="",ylab=expression(cos(theta)),xaxt="n") axis(1,tick=T,labels=F) plot(theta,tan(theta),type="l",xlab=expression(theta),ylab=expression(tan(theta)))とすると,一番下のプロットに付けたxlabが消えてしまいます.そこで
theta<-seq(-pi,pi,by=0.1) par(mfrow=c(3,1),mar=c(0,4,0,0),oma=c(5,4,4,1)) plot(theta,sin(theta),type="l",xlab="",ylab=expression(sin(theta)),xaxt="n") axis(1,tick=T,labels=F) plot(theta,cos(theta),type="l",xlab="",ylab=expression(cos(theta)),xaxt="n") axis(1,tick=T,labels=F) par(mar=c(5,4,0,0) plot(theta,tan(theta),type="l",xlab=expression(theta),ylab=expression(tan(theta)))としてみましたが,これでは最後にプロットしたグラフの大きさが上の二つとは変わってしまいます.
どなたかうまい方法をご存知であれば教えていただけないでしょうか
環境 : R version 2.5.0 Under development (unstable) (2006-11-20 r39944)
i386-pc-mingw32
par(mfrow=c(3,1),mar=c(4,4,0,0),oma=c(5,4,4,1))
theta<-seq(-pi,pi,by=0.1) par(mfrow=c(3,1),mar=c(0,4,0,0),oma=c(4,1,1,1),xpd=NA,cex=3) plot(theta,sin(theta),type="l",xlab="",ylab=expression(sin(theta)),xaxt="n") axis(1,tick=T,labels=F) plot(theta,cos(theta),type="l",xlab="",ylab=expression(cos(theta)),xaxt="n") axis(1,tick=T,labels=F) plot(theta,tan(theta),type="l",xlab="",ylab=expression(tan(theta))) text(0, -110, expression(theta))
theta<-seq(-pi,pi,by=0.1) par(mfrow=c(3,1),mar=c(0,4,0,0),oma=c(5,4,4,1),las=1) plot(theta,sin(theta),ylim=c(min(sin(theta))*1.5,max(sin(theta))*1.5),type="l",xlab="", ylab=expression(sin(theta)),xaxt="n",yaxt="n") axis(1,tick=T,labels=F) axis(2,tick=T,labels=T,at=pretty(sin(theta))) plot(theta,cos(theta),ylim=c(min(cos(theta))*1.5,max(cos(theta))*1.5),type="l",xlab="", ylab=expression(cos(theta)),xaxt="n",yaxt="n") axis(1,tick=T,labels=F) axis(2,tick=T,labels=T,at=pretty(cos(theta))) plot(theta,tan(theta),ylim=c(min(tan(theta))*1.5,max(tan(theta))*1.5),type="l",xlab="", ylab=expression(tan(theta)),xaxt="n",yaxt="n") axis(1,tick=T,labels=T) axis(2,tick=T,labels=T,at=pretty(tan(theta))) mtext(expression(theta),side=1,line=3)あとは仰られるように文字サイズの微調整も必要そうですね. -- 2006-11-23 (木) 00:48:17
まめ (2006-11-22 (水) 14:54:07)
Rmapを用い、地図を作成したいのですが、手順どおり作業を行ってもうまくいきません。
ご存知の方教えてください。
使用環境は以下です。
PC:Windows XP> sessionInfo() Version 2.3.1 (2006-06-01) i386-pc-mingw32 attached base packages: [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" [7] "base"手順は以下の通り行いました。
1、以下のファイルを入手
・shapefile.dill
・proj.dill
・Rmap_1.1.0
2、shapefill.dillおよびproj.dillをRインストール先のbinファイルに保存
3、RGuiを起動し、『パッケージ』から『ローカルにあるzipファイルからのパッケージのインストール...』を選択し、Rmap_1.1.0.zipを読み込む
以上を行うと以下のように示されます。> utils:::menuInstallLocal() updating HTML package descriptionsそしてRmapパッケージをロードすると、エラーが返されます。
> library(rmap) 以下にエラーlibrary(rmap) : 'rmap' という名前のパッケージはありませんそこで、再び『パッケージ』に入り、『パッケージの読み込み...』のパッケージ一覧からRmapを選択すると以下のようなメッセージが返されます。
> local({pkg <- select.list(sort(.packages(all.available = TRUE))) + if(nchar(pkg)) library(pkg, character.only=TRUE)}) 以下にエラーlibrary(pkg, character.only = TRUE) : 'Rmap' は有効なパッケージではありません。バージョン < 2.0.0 でインストールされたかも知れません以上が私の行った作業とその結果です。 初心者のため、何が問題点なのか分かりません。お手数ですが、どなたかお教えいただけませんでしょうか?
ちょもらんま (2006-11-14 (火) 13:11:51)
Rで使われているRのシステム自体が用いる変数名=予約語(data等々)の全リストが知りたいのですがどこかにありますでしょうか
またもし自分で作ったRスクリプト中でRの予約語と重複するような変数名を用いた場合、該当スクリプトの動作がおかしくなるというようなことはありますでしょうか?
> ..1 <- 3 > ..1 [1] 3
ふみふみ (2006-11-14 (火) 10:53:52)
数値(整数4桁、小数3桁)からなるデータフレーム、またはマトリックス中にデータが無いことを示す「NA」が行中、または列中の特定箇所に含まれてしまっている様な場合、その「NA」を含む、行、列を除き、「NA」を含まない、純粋な数値からなるデータフレーム、またはマトリックスを抽出したいと考えております。そのような事を可能にするような関数等存在しますでしょうか。本Wiki,色々なRのサイト、マニュアル等見ましたが適した関数が無く、質問させていただきました。
どうぞよろしくお願いいたします。
> # 例を作る > x <- matrix(1:30, 5, 6) > x[1,2] <- x[3,4] <- x[4, 6] <- NA > x [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 NA 11 16 21 26 [2,] 2 7 12 17 22 27 [3,] 3 8 13 NA 23 28 [4,] 4 9 14 19 24 NA [5,] 5 10 15 20 25 30 > # 適用 わずかにこれだけ > y <- x[!is.na(rowSums(x)), !is.na(colSums(x))] > y [,1] [,2] [,3] [1,] 2 12 22 [2,] 5 15 25
> x[complete.cases(x),complete.cases(t(x))] [,1] [,2] [,3] [1,] 2 12 22 [2,] 5 15 25それでもって,びっくりしたことは,後者の方が効率がよいということ。
> x <- matrix(1:30, 5, 6) > x[1,2] <- x[3,4] <- x[4, 6] <- NA > system.time(for(i in 1:100000) y <- x[!is.na(rowSums(x)), !is.na(colSums(x))]) user system total user.children system.children 24.156 0.480 27.397 0.000 0.000 > system.time(for(i in 1:100000) z <- x[complete.cases(x),complete.cases(t(x))]) user system total user.children system.children 4.914 0.087 5.540 0.000 0.000ていうか,行列のサイズにも依存するかもね。こういうのは,判断が難しい。
> x <- matrix(rnorm(1000000), 1000, 1000) > x[sample(1000,50),sample(1000,50)] <- NA > system.time(for(i in 1:100) y <- x[!is.na(rowSums(x)), !is.na(colSums(x))]) user system total user.children system.children 27.518 2.444 32.602 0.000 0.000 > system.time(for(i in 1:100) z <- x[complete.cases(x),complete.cases(t(x))]) user system total user.children system.children 25.149 4.482 32.726 0.000 0.000
<ふ> (2006-11-09 (木) 22:24:40)
みなさま、
データの単純な集計にtable()をつかってますが、以下のような場合に困っています。
たとえば、xを、> x <- c(1,1,1,2,2,4,4,5)として、
> table(x)を実行すると、
x 1 2 4 5 3 2 2 1となりまして、データがある、1,2,4,5は、でてきますが、データがない、3は、出力にあらわれません。
しかし、グラフに表示するにあたって、項目3が、ゼロであることを表現したいのです。
つまり、x 1 2 3 4 5 3 2 0 2 1というような状態をつくりたいのですが、なにか方法はありませんでしょうか。
たとえば、項目の要素を、ベクトルで与えて(ここでは、c(1:5))、それに対して「集計する」というようなことができればいいのですが。
アドバイスよろしくお願いいたします。
Akira (2006-11-08 (水) 17:59:29)
WindowsXPからLinux(ubuntu)に乗り換えようとしています。R-2.4.0patchです。
ファイルサーバにあるデータを読み込みたいのですが、サーバにはUserNameとPasswordが設定してあります。
WinXPではGUIでサーバにアクセスしておけば、R上でも読み込むことができます。
Linuxではうまくできません。Linux上でsetwd("//xxx.xxx.xx.xxx/abc")のようにアクセスする方法はありますでしょうか?
WinXPでは次のようにしています。
- //xxx.xxx.xx.xxx/abcにデータがあるとします
- GUIでサーバにアクセス(UserNameとPasswordを入力)
- Rを起動
- setwd("//xxx.xxx.xx.xxx/abc")で移動可能
>sudo smbmount //xxx.xxx.xx.xxx/abc /mnt/abc -o username=abc
<ふ> (2006-11-07 (火) 17:11:15)
みなさま、
グラフを出力するにあたり
jpeg()
のように、ファイル名を指定しないでおくと、Rplot%03d.jpg のような書式で順番にファイル名をインクリメントして書き出してくれます。
で、この%03dにわたされている数値を参照する方法はありませんでしょうか。
現在やっているのは、
1)xtable()である項目をHTMLの表にする。
2)その項目のグラフを描画しファイルに書き出す。
これを、一本の report.html というようなファイルで束ねることです。
1)は、そのまま、sink(repot.html)で吐き出してくれるのですが、グラフのファイルを、<IMG SRC="....">で指定したいと思っております。次に書き出すファイル名(%03dに渡す番号)がわかれば、ファイル名を書き出せます。
アドバイスよろしくお願いいたします。
for (i in 1:3) { file.name <- sprintf("Fig%03i.jpeg", i+200) jpeg(file.name, width=400, height=300) hist(rnorm(1000)) dev.off() }
fname <- function() { a <- list.files() sprintf("Rplot%03i.jpg", max(as.numeric(substr(a[grep("Rplot", a)], 6, 8)))) }利用例は以下のごとし。ただ,私は,pdf 関数でやってみた。
> fname <- function() + { + a <- list.files() + sprintf("Rplot%03i.pdf", max(as.numeric(substr(a[grep("Rplot", a)], 6, 8)))) + } > pdf(onefile=FALSE) > hist(rnorm(1000)) > hist(runif(1000)) > fname() [1] "Rplot002.pdf" > plot(1:100, (1:100)^2) > plot(1:100, (1:100)^3) > fname() [1] "Rplot004.pdf" > plot(rnorm(100), rnorm(100)) > fname() [1] "Rplot005.pdf"
> row.names(a <- file.info(list.files(pattern=glob2rx("Rplot[0-9]*.jpg")))["mtime"])[which.max(a[,1])] [1] "Rplot002.jpg"ちなみに得られる正規表現は以下の通りですから、これを直接 pattern に指定しても可。
> glob2rx("Rplot[0-9]*.jpg") [1] "^Rplot[0-9].*??.jpg$"
青木繁伸 (2006-11-06 (月) 18:26:00)
自分ではやらないことも,他人がやってしまうとその後始末が大変です。
私なら数値にコード化してデータ入力するのだが,日本語のままデータを入力してくれた学生がおりまして,read.fortran か read.fwf で読ませればよいやとタカをくくっていたのだが,これらの関数は,バイト数で読むのではなく文字数で読むということが判明。AWKかperlでスクリプトを組んで,CSVファイルにはき出すと何のことはないのだが,その学生はプログラムできないので,エクセルの「データ区切り」を使ってCSVファイルを作らせることになってしまった。
入力欄が5バイト分という半端な状態だったのであるが,これを偶数バイト(6バイト)にして全角3文字に満たないときは残りを全角空白で入力)なるようにエディタでちょいちょいといじって,読めるようにしてしまった。
read.fwfのソースをいじるのも気が進まない。
lc<-Sys.getlocale("LC_CTYPE") Sys.setlocale("LC_CTYPE","C") df<-read.fwf("hoge.dat",width=c(バイト,バイト,バイト)) Sys.setlocale("LC_CTYPE",lc). -- なかま 2006-11-06 (月) 20:23:28
> lc<-Sys.getlocale("LC_CTYPE") > Sys.setlocale("LC_CTYPE","C") [1] "C" > con <- file(description="ID1001-2.txt", open="r", encoding="shift-jis") > df <- read.fwf(con, width=c(4,rep(1,13),6,2,1,1,6,2,rep(1,59), 2, 2, 1, 4), header=TRUE) Warning messages: 1: 入力コネクション 'ID1001-2.txt' に不正な入力がありました 2: 'ID1001-2.txt' に関する readLines で不完全な最終行が見つかりました > Sys.setlocale("LC_CTYPE",lc) [1] "ja_JP.UTF-8"
# fn.in 読みこみたいデータファイル名 # width 各変数に読みこむ欄の桁数(バイト数!) # header 1行目に変数名があるかないか get.fwf <- function(fn.in, width, header=FALSE) { nf <- length(width) pos <- cumsum(width)+1 pos <- c(1, pos[-nf]) fn.out <- tempfile() fn.awk <- tempfile() con <- file(fn.awk, open="w", encoding="euc-jp") cat("BEGIN {?n", file=con) for (i in 1:nf) { cat(sprintf("pos[%i]=%i; width[%i]=%i?n", i, pos[i], i,width[i]), file=con) } cat("}?n", file=con) if (header) { cat("FNR == 1?n", file=con) cat("FNR > 1", file=con) } cat(sprintf("{ for (i = 1; i < %i; i++) {?n", nf), file=con) cat("str = allblank(substr($0, pos[i], width[i]))?n", file=con) cat("printf ?"%s??t?", str}?n", file=con) cat("str = allblank(substr($0, pos[i], width[i]))?n", file=con) cat("print str }?n", file=con) cat("function allblank(str) {?n", file=con) cat("for (j=1; j <= length(str); j++)?n", file=con) cat("if (substr(str, j, 1) != ?" ?") return str?n", file=con) cat("return ?"NA?"", file=con) cat("}?n", file=con) close(con) # awk しかない人は ln -s awk gawk するか,下の gawk を awk に書き換え cmd <- paste("gawk -f", fn.awk, fn.in, ">", fn.out) print(cmd) system(cmd) df <- read.table(file(fn.out, open="r", encoding="euc-jp"), header=header) unlink(fn.awk) unlink(fn.out) return(df) } # 利用例 # df <- get.fwf("test.dat", width=c(4, rep(1, 13), 5, 2, 1, 4), header=TRUE)
<ふ> (2006-11-04 (土) 23:17:00)
みなさま、
pieを使って円グラフを書くときに、今までの習慣で、0時から時計回りに表示させています。そのために、clockwise=TRUEと引数を指定して記述しているのですが、だんだん面倒になりまして、(Rってオブジェクト指向言語なんだから)
pie2() = pie(closkwise=TRUE)
というように、新しいインスタンスをつくれないだろうかと思っています。
ですが、上記の形ではNGでした。
なにかやりようがありそうですが、どなたかご教示いただけませんでしょうか。
> pie2 <- function(x, labels = names(x), edges = 200, radius = 0.8, init.angle = 90, density = NULL, angle = 45, col = NULL, border = NULL, lty = NULL, main = NULL, ...) { pie(x, labels, edges, radius, clockwise = TRUE, init.angle, density, angle, col, border, lty, main, ...) }
> pie2 <- function(x, labels = names(x), edges = 200, radius = 0.8, clockwise = TRUE, init.angle = if(clockwise) 90 else 0, density = NULL, angle = 45, col = NULL, border = NULL, lty = NULL, main = NULL, ...) { pie(x, labels, edges, radius, clockwise, init.angle, density, angle, col, border, lty, main, ...) }
pie2 <- function(x, clockwise=TRUE, ...) pie(x, clockwise=clockwise, ...)とすれば完璧なんじゃないでしょうか。こうしておけば,clockwise=FALSE が指定されても,問題ないでしょう(最初に提示しなかったのは冗長だという理由からだけです)
kazu (2006-11-02 (木) 15:21:46)
Rを用いて、PLSRを行いたいと思っています。
Rとpls.pcrのversionはそれぞれ、2.4.0、1.2-1です。 下記のページを参考にしています。
http://cse.naro.affrc.go.jp/iwatah/toukei/pls/2004/pls_intro04.htm
pls.pcrパッケージに含まれたサンプルデータではpls解析を行えることを確認しましたが、「手持ちのデータでPLS回帰分析」の部分がうまくいきません。
wine.txtを> wine <- read.table("wine.txt")で読み込み
> wineで読み込めたことを確認しました。
次に> Y <- scale(wine[,1:3]) > X <- scale(wine[,4:7])でデータを切り分けました。
plsrを行うために、
http://cran.r-project.org/doc/packages/pls.pdf
を参考に> wine.pls <- plsr(Y ~ X, 6, validation="CV")と入力しましたが
以下にエラーmvr(Y ~ X, 6, validation = "CV", method = "kernelpls") : Invalid number of components, ncompと表示されうまくいきません。ncompの値をいじってはみたのですが同様のエラーが表示されます。
どのような原因が考えられるでしょうか?
Hedonic Goes_with_meat Goes_with_dessert Price Suger Alcohol Acidity 1 14 7 8 7 7 13 7 2 10 7 6 4 3 14 7 3 8 5 5 10 5 12 5 4 2 4 7 16 7 11 3 5 6 2 4 13 3 10 3ncompの値は1〜10位の間で振ってみました。-- kazu 2006-11-02 (木) 16:29:18
TRAINING: % variance explained 以下にエラーdimnames(tbl) <- list(c("X", yvarnames), paste(1:object$ncomp, : 'dimnames' の長さ [1] が配列の大きさと違っていますまた、上記のページにあるようにncompを3にすると
> wine.pls <- plsr(Y ~ X, 3, validation="CV") 以下にエラーLa.svd(XtY) : 'x' のに無限値か欠測値がありますと表示されますね。。。??初心者過ぎてお恥ずかしいです。-- kazu 2006-11-02 (木) 17:04:03
koike (2006-10-31 (火) 23:28:31)
統計初心者です。因子分析を実際にやってみようと思いやってみたところ、データは読み込むことができるのですがresult <- pdf(dat)と入力すると
Warning message: Communality >= 1. in: pdf(dat)とでてしまい、それ以上なにもできなくなってしまいます。
変数が多かったからいけないのかと何度も変えてみてもできません。
どうしたら、因子分析できるようになるのでしょうか?
pdf.datの中身は、適当にうちこのような数値です。バ ス ミ マ ク チ メ コ ア ラ か き キ ウ カ プ オ 1 7 7 8 3 9 9 6 8 3 2 1 7 9 3 3 9 7 2 7 8 9 9 9 9 2 7 7 9 5 4 7 8 9 9 4 3 7 4 3 3 6 4 7 7 6 3 3 4 6 3 3 6 7 4 9 6 6 5 8 6 8 9 6 5 4 4 9 5 4 8 9 5 9 5 7 5 6 8 4 4 4 6 9 6 6 6 5 9 6 6 5 7 5 5 5 7 5 8 5 8 9 5 9 5 8 8 9 7 9 7 6 3 7 9 4 6 5 2 2 6 7 5 5 9 9 8 7 7 6 8 7 6 5 8 7 5 6 5 6 7 9 5 6 9 7 7 4 8 7 7 4 7 6 3 5 5 7 7 6 8 6 10 5 5 9 5 8 8 5 6 3 3 3 8 7 2 8 8 6 11 8 1 8 9 7 9 3 9 4 7 4 4 9 7 6 6 7 12 9 4 7 5 8 4 5 7 5 6 9 4 4 5 8 9 5 13 7 7 6 8 8 9 6 7 7 6 6 5 9 7 5 9 7 14 9 6 4 6 9 9 3 6 8 9 4 6 7 8 4 9 9 15 8 7 5 5 5 9 4 5 4 3 9 4 4 6 5 8 6 16 7 4 7 4 7 3 3 7 5 3 6 6 6 6 6 4 6 17 6 4 2 2 7 6 4 5 5 8 3 4 6 6 5 7 5 18 8 7 5 5 6 8 3 5 6 3 7 3 5 4 5 7 9 19 5 9 8 5 7 5 5 5 9 4 7 6 6 7 7 8 7 20 6 6 6 8 8 6 1 5 7 8 4 5 7 7 7 7 6もう一つですが、因子分析はやはり変量がサンプル数より多いと実行できないのでしょうか?
dat <- read.table("pdf.data", header=TRUE)と打ち読もうとすると、ファイルがないとエラーがでてしまいました。どうして読み込んでくれないのかわからなく試行錯誤しpdf.datとdatファイルに直したところ読み込めたので、pdf.datとしました。読み込めた中身を確認するためdatと打つと、ちゃんと確認することができました。
result <- pdf(dat)と入力したのです。その結果エラーが
Warning message: Communality >= 1. in: pdf(dat)とでてしまったのです。
> x <- read.table("pdf.data", header=TRUE) > result <- pfa(x, factors=3) > result $rotation [1] "Varimax" $correlation.matrix バ ス ミ マ ク チ メ バ 1.00000000 -0.21985732 -0.08560197 -0.01360948 0.09620525 0.21050276 0.02883936 以下略。。。。
浜田 (2006-10-31 (火) 09:56:56)
以下のスクリプトで、指定した範囲の地図を描画させたいのですが、余分な範囲まで、含まれてしまいます。指定の範囲(xlim,ylim)だけをカッチリとプロットさせるには、どうすれば良いのでしょうか?library(maptools) jpn <- read.shape("japan_ver60.shp") png(file="test.png", width=800, height=800) plot(jpn, xlim=c(135.0,136.0), ylim=c(34.0,35.0)) dev.off()実行結果は、
となってしまいます。、(図が大きくて、すみません・・・・)
png(かっちりサイズ) plot.new() par(mar=c(0,0,0,0),usr=c(135.0,136.0,34.0,35.0)) # usrはかっちり指定してください plot(jpn, xlim=c(135.0,136.0), ylim=c(34.0,35.0),add=T,axis=F) # ワーニング等は気にしてはいけない.axisが怪しい...ですが-- なかま 2006-10-31 (火) 11:21:01
g (2006-10-30 (月) 20:41:20)
RでGISの"関連情報"に「Springer より、R を使った本が出る予定」との記事があったのですが,これは,「Rの基礎とプログラミング技法」のことを指しているのだと思いますが,この本は,GISについての記述があるのでしょうか? amazonの目次紹介では,それらしき項目はなさそうなのですが,購入された方,教えてください.
青木繁伸 (2006-10-30 (月) 18:46:38)
私はWindowsがほとんどわからないのに(Macならある程度わかるんですけど),Windowsもあまり知らない初心者にRを使わせようとして四苦八苦しています。
「こんなときにWindowsではどうやるのだっけ?」例えば,ファイルの拡張子を表示するように設定するにはどうやれば良いのか。まるっきり知らないわけではないので,最終的にはキーワードなんかでググってみてやり方を思い出したり。
というグチはこれくらいにして,今日聞きたいのは,プロジェクト(課題)ごとにディレクトリを作り,あるプロジェクトのデータ解析はいつもそこで行うというように決めるとき。ただ,一つの課題が終わるまで,ずーーーと同じディレクトリばかりで仕事をしているわけではない。あちこちのディレクトリを渡り歩いて,少しずつ仕事をするような場合。
Rを起動して,どのプロジェクトの仕事をしようかと言うとき,まずやらなくてはならないのは「作業ディレクトリ」の変更。毎度やるのも面倒だという場合には,Rのディレクトリに .Rprofile を作って,その中に setwd("/foo/bar") と書いておけばよいが,違うプロジェクトの仕事をするときには,コンソールから setwd("/foo/baz") とすれば,移動はできる。しかし,R を終了して再度 /foo/baz で仕事を継続しようとしても,R は /foo/bar を作業ディレクトリにしてくれる(怒)。しばらくは /foo/baz で仕事をするとすれば,.Rprofile を書き換えないといけない。面倒だ。
こんなとき,皆さんはどうやっているのでしょうか。
なお,いろいろやっていて,どのディレクトリで仕事をしようかというのが決まれば,そのディレクトリを開いて,そこにある .RData をクリックすれば,そのディレクトリを作業ディレクトリとして R が立ち上がるということはわかりました。(もしかして,これが一番良いやり方なんでしょうか?)
もっと良い方法はないんでしょうか。
// hoge.js var Shell, FS, Desktop,Desktopex, path, Link, Rpath; Rpath = "c:??Program Files??R??R-2.4.0??bin??Rgui.exe"; Shell = WScript.CreateObject("Wscript.Shell"); FS = WScript.CreateObject("Scripting.FileSystemObject"); Desktop = FS.GetFolder(Shell.SpecialFolders("Desktop")); Desktopex = FS.CreateFolder(Desktop + "??演習"); path = Desktopex.Path + "??R-2.4.0_ex01.lnk"; Link = Shell.CreateShortcut(path); Link.TargetPath = Rpath ; Link.Arguments = "LANGUAGE=en"; Link.WorkingDirectory = "C:??"; Link.Save();ダブルクリックなり,バッチ(CMD.EXE)の中ではファイル名で実行してくれます. -- なかま 2006-10-30 (月) 20:25:54
げのまー (2006-10-30 (月) 11:58:10)
同じ長さの論理値のベクトル同士から,各要素ごとにandをとってベクトルが得られるような方法をご教示ください。
例えば,以下の例でaとbからc(TRUE,FALSE,FALSE,FALSE)というベクトルが得たいのです。
ループで各要素ごとに処理する方法は知っておりますので,ベクトル全体で演算する方法を知りたいです。
以下の方法では,1個目の要素についての結果しか得られておりません。
> a<-c(TRUE,FALSE,TRUE,FALSE) > b<-c(TRUE,TRUE,FALSE,FALSE) > a && b [1] TRUE
93795号 (2006-10-30 (月) 10:40:41)
中国語を含むデータを使用する必要があるのですが,データをうまく読み込むことができずに苦戦しています。
「ファイル Tips 大全」の「特定の文字コードのファイルを read」を参考に encoding を UTF-8,改行コードを CR/LF として,以下の3行を含むテキストファイル(utf8.txt)を作成しました。石巻市 岩出山町 岩沼市そして,ファイルを読み込もうとしたのですが,エラーが出てしまいました。
> read.table(file(description="utf8.txt",open="r", encoding="utf-8")) 以下にエラーread.table(file(description = "utf8.txt", : ファイルの開始部分が空です 追加情報: Warning messages: 1: 入力コネクション 'utf8.txt' に不正な入力がありました 2: 'utf8.txt' の readTableHeader で不完全な最終行が見つかりました同じ内容のファイルを Shift-JIS で作成した場合は問題なく読み込めました。
この先,何らかの対処をするにしても,どこから手をつけたらよいのか見当がつきません。
皆さんのお知恵を拝借できれば幸いです。
使用環境等は下の通りです。よろしくお願いいたします。> 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" > iconvlist() .... [363] "UTF-16" [364] "UTF-16BE" [365] "UTF-16LE" [366] "UTF-32" [367] "UTF-32BE" [368] "UTF-32LE" [369] "UTF-7" [370] "UTF-8" ....
read.table(file(description="utf8.txt",open="r", encoding="utf-8"), header=FALSE)としなければなりませんね。 -- 2006-10-30 (月) 11:46:00
00000000: efbb bf20 2020 e79f b3e5 b7bb e5b8 820d 00000010: 0a20 e5b2 a9e5 87ba e5b1 b1e7 94ba 0d0a 00000020: 2020 20e5 b2a9 e6b2 bce5 b882 0d0aのようになっています。しかし,情けないことに自分ではこれで問題ないのかどうかがよくわかりません。 -- 93795号 &new([nodate]){date}: Invalid date string;
> read.table(file(description="test.txt",open="r", encoding="utf-8"), header=T, fill=T) A B C 1 1 2 中国 2 2 1 日本 3 3 1 ?国 4 4 2 Warning messages: 1: 入力コネクション 'test.txt' に不正な入力がありました 2: 'test.txt' の readTableHeader で不完全な最終行が見つかりました4行目のC には「两国」と入力されているのですが,読み込んでくれませんでした。なかなか難しいです。 -- 93795号 2006-10-30 (月) 20:13:05
2-4-0? (2006-10-29 (日) 15:46:45)
はじめまして。お世話になります。
Windows binaryのR2-4-0をWindows XP上で使っています。XMLパッケージ(XML_0.99-93)をロードしようとすると以下のエラーが出ます。(XEmacs-21.4.19、ess-5.2.8を使った結果ですが、Rguiでも同じでした)> library(XML) Error in dyn.load(x, as.logical(local), as.logical(now)) : unable to load shared library 'c:/PROGRA~1/R/R-24~1.0/library/XML/libs/XML.dll': LoadLibrary failure: The specified procedure could not be found. Error: .onLoad failed in 'loadNamespace' for 'XML' Error: package/namespace load failed for 'XML'何か解決法はありますでしょうか? 2-4-0の変更点のページか何かで、”methodsを使っている関数は書き換えが必要”というような記述を見たような記憶があるのですが、それでしょうか?
また、ヘルプを呼び出そうとしても似たような以下のエラーがでます。> ?c Error in print.help_files_with_topic("c:/PROGRA~1/R/R-24~1.0/library/base/chm/c") : CHM file could not be displayedどうぞよろしくお願いいたします。
永野 (2006-10-24 (火) 12:06:26)
作業スペースの読み込み後LOADされたコンソール画面を表示するにはどうしたらよいですか。
pahud (2006-10-23 (月) 21:24:34)
Rで扱える行列のサイズの上限は,Rがインストールされているプラットホームによって異なるのでしょうか.それとも,Rが仕様として上限を設定しているのでしょうか.
matsu (2006-10-23 (月) 11:56:05)
はじめまして。こんにちわ。
オブジェクトの指定について質問させてください。> data8 V1 V2 V3 V4 V5 V6 V7 V8 1 A B B B B B B B 2 B B B B B B B B 3 A A A B A B A A 4 B A B A B A B B 5 B B B B B B B B 6 B B B B B A B B 7 B B B B B B B B以上のようなデータがあって、例えば1列目と2列目の同じ行の要素を見て、A,AであればA、A,BであればB、B,AであればC、B,BであればDというように置き換えて新しいベクトルを作りたいので、まずは試しに2区分するために以下のように書きました
ifelse(((data8[,1] == "A") && (data8[,2] == "A")),"A","B")しかし結果は
[1] "B"と表示されベクトルを得ることができません。4区分にしても同じようになります。これを解決する方法はあれば教えて下さい。
よろしくお願いします。
take (2006-10-17 (火) 19:51:40)
下記のように、カテゴリー値を含めてデータが一列になったものを、 データのカテゴリごとにまとめた形に整形したいのですが、 このような作業をしてくれる関数はありますでしょうか。
subsetなどを駆使すれば無理やりできますが、頻繁に使われますよね。 非常に初歩的な質問かと思いますが、適切なキーワードが見つかりませんでしたので どなたかお助けくださると助かります。
変換前(データベース形式)
year type value 2001 A 5 2002 A 10 2003 A 15 2001 B 1 2002 B 3 2003 B 5 変換後(テーブル形式)
A B 2001 5 1 2002 10 3 2003 15 5
> # 引数は3列からなるデータフレームとする > convert <- function(df) + { + df[,1] <- as.factor(df[,1]) + df[,2] <- as.factor(df[,2]) + m <- matrix(0, length(table(df[,1])), length(table(df[,2]))) + for (i in 1:nrow(df)) m[df[i,1], df[i,2]] <- df[i,3] + rownames(m) <- levels(df[,1]) + colnames(m) <- levels(df[,2]) + return(m) + } > df <- data.frame(x = c(2001, 2002, 2003, 2001, 2002, 2003), + y = c("A", "A", "A", "B", "B", "B"), + z = c(5, 10, 15, 1, 3, 5)) > convert(df) A B 2001 5 1 2002 10 3 2003 15 5
> # 重複したデータがないことを、lengthで確かめて、、 > tapply(df$z,list(df$x,df$y),length) A B 2001 1 1 2002 1 1 2003 1 1 > # sum (または mean)で集計。 > tapply(df$z,list(df$x,df$y),sum) A B 2001 5 1 2002 10 3 2003 15 5mmk 2006-10-18 (水) 13:14:04
> df <- data.frame(year = c(2001, 2002, 2003, 2001, 2002, 2003), + type = c("A", "A", "A", "B", "B", "B"), + value = c(5, 10, 15, 1, 3, 5)) > xtabs(value~year+type,df) type year A B 2001 5 1 2002 10 3 2003 15 5
> df <- data.frame(year=c(2001,2002,2003,2001,2002,2003,2001), type=c("A","A","A","B","B","B","A"),value=c(5,10,15,1,3,5,100)) > xtabs(value~year+type,df) type year A B 2001 105 1 2002 10 3 2003 15 5
takahashi (2006-10-17 (火) 16:26:21)
例えばモノクロで印刷される原稿用とプレゼン用で、同じグラフだけどモノクロ出力(この場合、線種で区別)、カラー出力を切り替えたいようなときは、どうするのが一番手っ取り早いかご存知でしょうか?
> hist(sqrt(islands), br = 12, col = "lightblue", border = "pink") > dev.copy2eps(file="color.eps", family="sans") #カラー > dev.copy2eps(file="| convert -colorspace GRAY - bw.eps", family="sans") #グレイ階調
> hist(sqrt(islands), br = 12, col = "lightblue", border = "pink") > dev.copy2eps(file="color.eps", family="sans") #カラー画像に出力 > system("bw_convert color.eps bw2.eps")
epep (2006-10-14 (土) 09:33:30)
はじめまして。よろしくお願いいたします。
Rコマンダーのファイルインポートについて教えていただきたいと思います。
最近エクセルファイルの読み込みに対応したということで、エクセルファイルを読み込もうとしているのですが、下記エラーメッセージが出てしまいます。要求されたパッケージ RODBC をロード中です 以下にエラーsqlTables(channel) : first argument is not an open RODBC channelデータをいろいろ変えたり、エクセルの保存形式を古いものにしたりと、試したのですが、うまくいきませんでした。
どうすれば読み込めるようになるか、教えていただきたいと思います。
よろしくお願い致します。
dura (2006-10-12 (木) 16:03:24)
はじめまして。こんにちわ。
オブジェクトの指定について質問させてください。
例えば> R1 A B A 24 5 B 5 16 > R2 A B A 22 7 B 6 15のようなデータがあるとき
m <- 1 n <- 2 R"m"*R"n"のような感じで行列演算のオブジェクトを指定できるようなやりかたはありますか?
ちなみにR"m"*R"n"では当然できません。例えばこのような感じで、というつもりで書きました。
> R1 <- matrix(c(24, 5, 5, 16), 2, 2) > R2 <- matrix(c(22, 6, 7, 15), 2, 2) > m <- 1 > n <- 2 > eval(parse(text=paste("R", m, "*", "R", n, sep=""))) [,1] [,2] [1,] 528 35 [2,] 30 240
takahashi (2006-10-05 (木) 19:04:42)
data.frameのデータをスプレッドシート形式で、目で見て確認できるようなライブラリ(Rcmdrのデータシートみたいなもんです)があるかどうかご存知でしたら、教えて下さい。
また、Matlabをご存知の方に伺いたいのですが、Matlabには変数(構造体というんですかね)の中身を探れるGUIツールがあると思います。
Rでlistが同じように、複雑にネストした構造になりがちだと思いますが、これをGUIで探れるようなライブラリがあるかどうかご存知でしたら教えて下さい。
よろしくお願いいたします。
4年生 (2006-09-27 (水) 19:23:05)
はじめましてこんにちは.
こないだからRを使おうと頑張っているのですが、分析がうまくできません.
エクセルで乱数を発生させて、54行×4列のデータファイルをつくってCSVファイルで保存しました(data.csv)
その後dat <- read.csv("data.csv",header=FALSE) datとすると54行×4列のデータが読み込まれます.
次にsummary(dat)とすると
V1 V2 V3 V4 10,006.13: 1 10,038.09: 1 10,058.34: 1 10,100.57: 1 10,077.88: 1 10,070.11: 1 10,112.10: 1 10,167.06: 1 10,248.81: 1 10,077.88: 1 10,148.36: 1 10,169.66: 1 10,264.61: 1 10,173.60: 1 10,171.17: 1 10,281.17: 1 10,281.25: 1 10,293.74: 1 10,186.77: 1 10,284.54: 1 10,303.26: 1 10,378.13: 1 10,213.75: 1 10,318.44: 1 (Other) :48 (Other) :48 (Other) :48 (Other) :48となってしまい,うまく結果が表示されません.
重回帰分析をしようとしてdat <- matrix(c(read.csv("data.csv",header=FALSE)),byrow=TRUE,nc=4) mreg(dat)としても
g(dat) : (subscript) 論理値添え字が長すぎますとなってしまいます.
googleで検索したり色々頑張りましたがうまくいきません・・・
どこに問題があるのでしょうか?
教えてください.よろしくお願いします.
Real (2006-09-25 (月) 14:14:58)
こんにちは。
以下のような数値データが入ったリストを書き込もうとするとa <- as.list(NULL) a[[1]] <- c(2.3, 3.5, 4.4, 2.3, 3.5, 4.4, 2.3, 3.5, 4.4) a[[2]] <- c(2.3, 3.5, 2.3, 3.5, 4.4) write(a, "aaa.txt", append=T) 以下にエラーcat(list(...), file, sep, fill, labels, append) : argument 1 (type 'list') cannot be handled by 'cat'と怒られてしまいます。
結果はこのように一番目の要素から順に横に展開したいと思っています。2.3, 3.5, 4.4, 2.3, 3.5, 4.4, 2.3, 3.5, 4.4 2.3, 3.5, 2.3, 3.5, 4.4リストを書き込むときはwrite()を使えばよいという情報があったのでこうしたのですが、どうすればよいのでしょうか?
どなたかご指導をお願いします。
匿名希望 (2006-09-21 (木) 13:24:21)
x 軸を本来の位置ではない場所に描くとき,plot(...., xaxt="n", xlab="", ...) として,axis(1, pos=foo, ...) としますが,そうすると,x 軸のラベルは付きません。plot 関数の中の xlab="" を取り除くと,本来 x 軸が描かれる位置に相応して x 軸のラベルがつきますが,これは当然意図した場所ではありません。オンラインヘルプを探したのですが,解決法は見つかりませんでした。
Akira (2006-09-19 (火) 20:02:59)
rgdalパッケージのreadGDALでtifイメージを取り込むことはできました。
MultiTiffイメージを同じように取り込むことはできるのでしょうか?
WinXP, R-2.3.1patchです。
初心者? (2006-09-19 (火) 10:44:39)
関数の中にいくつかのグラフを表示させるコードが入っています。
コードを使い
R gurahicsに表示されるグラフに名前をつけて保存させることは出来るのでしょうか?
自動化したいと考えてるのですが ご教授ください。
draw.graph <- function(file.name="") { if (file.name != "") pdf(paste(file.name, "%03i.pdf", sep=""), onefile=FALSE) hist(rnorm(1000)) plot(rnorm(1000, 1000)) barplot(rbinom(10, 1000, 0.25)) if (file.name != "") dev.off() } draw.graph("test")
初心者 (2006-09-17 (日) 19:23:04)
お世話になっています
ポスター制作のため,Rで出力したグラフをdev.copy2epsで出力し,Adobe Illustrator CS2に貼付けているのですが,ギリシャ文字が文字化けしてしまいます(SymbolというフォントがIllustrator側には無いようです).
そこで,アウトライン化したベクトル画像を出力したいのですが,Rではそういったことは可能なのでしょうか?
環境 : R version 2.2.1, 2005-12-20, powerpc-apple-darwin7.9.0
カータン (2006-09-16 (土) 12:34:25)
こんにちは,現在会社(一般ユーザはuser権限のみ)でRをインストールしたいのですが,admin権限でインストールした後,user権限でそのパソコンにログインしても,Rgui.exeが全く起動しないのですが,そのような物なのでしょうか。ちなみにPowerusersの権限で入っても同じでした。インストール時のユーザ名でないと駄目なのでしょうか。
もし上記のことが可能ならば,パッケージの導入の際にも,admin権限で導入して,その後user権限で使用可能かを現在検討したいのですが,その点もおわかりの方がいらっしゃったらよろしくお願い致します。Powerusers権限ならパッケージ導入も可能なのでしょうか。
DNA (2006-09-15 (金) 17:30:53)
こんにちわ。現在クラスター分析に取り組んでいます。手順としては、>iris.x <- iris[,-5] >d.euclid <- dist(iris.x, method="euclid") >cluster <- hclust(d.euclid, method="average")以上のように行っています。ただ、こちらの都合でd.euclidを自前で作ったものに差し替えたいのですが、自分で作った行列をhclust()に投げても上手くいきません。
どのようにすればよいのでしょうか?よろしくお願いします。
A B C "A" 1 0.5 0.1 "B" 0.5 1 0.4 "C" 0.1 0.4 1といった行列をつくって、read.table()で読み込んでいます。
tottie (2006-09-11 (月) 14:04:05)
こんにちは。以下のようなデータフレームがあり、
NAME num_1 num_2 num_3 STR NUM data_M15 0.322 0.322 -0.040 asd 3 data_G11 0.230 0.507 -0.279 sdf 2 data_B21 0.219 0.160 -0.069 dfg 8 data_C04 0.011 0.292 -0.064 fgh 3 data_J12 0.254 0.238 -0.180 ghj 1 data_P08 0.323 0.320 -0.254 hjk 2 data_M11 0.356 0.330 0.066 jkl 1
一番右列の数字によってSTRを分類したリストを作りたいと思っています。
たとえばリストの一番目の要素にNUM3のSTRであるasdとfgh、
二番目の要素にNUM2のSTRであるsdfとhjkが格納されているリストを作りたいです。
subset()を使用してNUMの値ごとに抽出すればよいとは思うのですが、
どうすればよいのかわかりません。
お手数ですが、ご指導をお願いします。
fjok (2006-09-10 (日) 13:28:59)
質問させていただきます.
グラフの軸の表示をデフォルトの1 e-01から有効数字n桁の小数掛ける10のべき乗,という書式に変更する方法をご存知の方はいらっしゃいますでしょうか.よろしくおねがいします.
set.seed(123) x <- rnorm(1000)*100+600 hist(x, xaxt="n") axis(1, at=3:9*100, labels=sprintf("%.0e", 3:9*100))
set.seed(123) x <- rnorm(1000)*100+600 hist(x,xaxt=F) hoge<-3:9*100 a<-sub("+","",substr(sprintf("%1.1e",hoge),nchar(sprintf("%1.1e",hoge))-3, nchar(sprintf("%1.1e",hoge))),extended=F)#指数部分の取り出し b<-sub("+","",substr(sprintf("%1.1e",hoge),1,nchar(sprintf("%1.1e",hoge))-5), extended=F)#小数部分の取り出し axis(side=1,at=hoge,labels=expression(a^b))とでもすればできるのかな,とおもったのですが,これだと最後の行のexpressionの引数のaとbは展開されないのでエラーになってしまうようで,これをなんとか解決しないといけないようです. -- fjok 2006-09-11 (月) 14:33:05
set.seed(123) x <- rnorm(1000)*10+100 hist(x,xaxt="n") at <- pretty(x) labels <- sprintf("%.2e", at) # 有効桁数は自分で(これも引数にするとか) axis(side=1,at=at,labels=labels)
t<-1:100 # ある実験データ signal <- 1.0e-3*(sin(t/5)+0.1*rnorm(100)) # ある実験データ E<-floor(logb(pretty(signal)[length(pretty(signal))],10)) # y軸の目盛りから指数部分を抽出 plot(signal,type="l",axes=F,xlab="Time(nsec)", ylab=parse(text=paste("Voltage(", parse(text=paste(10,"^",E)),")"))) box() par(las=1) axis(1) axis(2,at=pretty(signal),labels=sprintf("%.1f", pretty(signal)/10^E*10^floor(logb(pretty(signal) [length(pretty(signal))],10))/10^E))
ぼう (2006-09-09 (土) 11:43:42)
おせわになります。
50枚くらいの多数の図をfor文で繰り返したものを、ひとつの画面に表示したいですが、mflow()やmfcol()では「以下にエラーplot.new() : 図の余白が大きすぎます」とでてしまって、表示できません。
pairs()で表示される図のように多数の図を表示するできる関数をどなたかご存知ないでしょうか?
> par(mfrow=c(8,8)) > for (i in 1:60) hist(rnorm(1000))
山嵐 (2006-09-08 (金) 10:23:37)
Rをバッチで実行しようと思っています。
その際、「R CMD BATCH」 + Rコマンドで実行するというのは
理解しているのですが、
オプションとして vanilla --no-save といったものを付けられるように
聞いております。実際にそれらオプションを理解したいとおもい
付けられるオプションの種類と意味をGoogleやR CMD BATCH -h などで調べたのですが、全くわかりませんでした。
R CMD BATCHのオプションについてご存じの方いらっしゃいましたら、オプション詳細についての調べ方やそういった情報が載っているサイトなどご教授いただければと思います。
お手数をおかけします。
inverse (2006-09-07 (木) 18:25:49)
皆さんにお聞きしたいことがあります。以下のようなリストを作成し、a <- as.list(NULL) a <- c(list(1:3), list(4:9))a1 と a2 ごとに逆数の和を求めたいのですが、どうすればよいでしょうか?
sapplyを使えばいいとは思ったのですが、逆数和を求める関数がないのでどうしようかと思っています。
自分で関数を定義するしかないんでしょうか?
RはVersion 2.3.1、Windows XPを使用しています。
ご回答よろしくお願いします。
> c(sum(1/a[[1]]),sum(1/a[[2]])) [1] 1.833333 0.995635
haruo (2006-09-07 (木) 15:02:59)
Mac OS X 10.4.6およびR for Mac OS X Version 2.3.1 (2006-06-01)の環境で、Rmapを使用することは可能でしょうか?RmapのWin32のバイナリはhttp://spatial.nhh.no/R/Devel/から入手できますが、Mac用バイナリ・ファイルは入手可能でしょうか?アドバイスを賜りたくよろしくお願い申し上げます。 参考文献:RjpWiki内の「Rmapを使った地図表示」「なんでも掲示板アーカイブ(5) / Rmap」「初級Q&A アーカイブ(3) / Rmapのインストールについて」> install.packages("Rmap") download.packages(pkgs, destdir = tmpd, available = available, 中で警告がありました no package 'Rmap' at the repositories > sessionInfo() Version 2.3.1 (2006-06-01) i386-apple-darwin8.6.1
crz1 (2006-09-06 (水) 22:48:58)
異なる区切り幅のヒストグラムを描いたところ、
それぞれのバーの横幅が不揃い(指定した区切り間相当の幅)になってしまいます。
このバーの横幅を一定にするにはどうすればいいのでしょうか?
sally (2006-08-30 (水) 11:01:13)
こんにちは。いつもWikiにお世話になっています。
さて、今回クラスタ図を描こうとしているのですが、描画を横向きにしたいのです。どうしてもやり方がわかりません。hc <- hclust(dist(USArrests)^2, "cen") plot(hc)これで描画される樹形図を縦ではなく、項目の名前が長いので、横で表示させたいのです。
ちょうど右90度回転させたような図を書くためにはどうしたらよいでしょうか?
ご教授お願い致します。
postscript("foo.ps", width = 5, height = 4, horizontal = FALSE, onefile = FALSE, paper = "special") plot(1:10) dev.off()等とすると, epsファイルができます, これを例えばスクリプトなんかで,
# 右回転90度 @@ -2,10 +2,11 @@ %%Title: R Graphics Output %%Creator: R Software %%Pages: (atend) -%%BoundingBox: 0 0 360 288 +%%BoundingBox: 0 0 288 360 %%EndComments %%BeginProlog -/bp { gs gs } def +%/bp { gs gs } def +/bp { gs 0 360.0 translate -90 rotate gs } def % begin .ps.prolog /gs { gsave } def /gr { grestore } defとか
# 左回転90度 @@ -2,10 +2,11 @@ %%Title: R Graphics Output %%Creator: R Software %%Pages: (atend) -%%BoundingBox: 0 0 360 288 +%%BoundingBox: 0 0 288 360 %%EndComments %%BeginProlog -/bp { gs gs } def +%/bp { gs gs } def +/bp { gs 288.00 0 translate 90 rotate gs } def % begin .ps.prolog /gs { gsave } def /gr { grestore } def以上, 「その手でやるんだ(c)沖田艦長」. でした. あとは, convertで? もっとも, ImageMagicが入っていれば, convertだけでも出来ます.
hc <- hclust(dist(USArrests)^2, "cen") par(mar = c(4,1,1,7)) plot(as.dendrogram(hc), horiz = T)
haruo (2006-08-30 (水) 10:22:28)
finkを使ってfftwとlibjpegをインストールした後、以下の3つの方法により、パッケージrimageのインストールを試みましたが失敗しました。アドバイスを賜りたくよろしくお願い申し上げます。
(方法1)関数 install.packages() でパッケージを指定
> install.packages("rimage") download.packages(pkgs, destdir = tmpd, available = available, 中で警告がありました no package 'rimage' at the repositories
(方法2)関数 install.packages() で圧縮ファイル(rimage_0.5-7.tar.gz)のパスを指定
> install.packages("/Users/haruo/Desktop/rimage_0.5-7.tar.gz", contriburl = NULL) 以下にエラーgzfile(file, "r") : コネクションを開くことができません 追加情報: Warning message: 圧縮されたファイル 'rimage_0.5-7.tar.gz/DESCRIPTION' を開くことができません
(方法3)メニューの [パッケージとデータ] から [パッケージインストーラ] を選択し、CRAN(ソース)の〔一覧を取得〕 し、rimageを選択して [OK] をクリック
(中略) checking fftw.h usability... no checking fftw.h presence... no checking for fftw.h... no ** Removing '/Library/Frameworks/R.framework/Versions/2.3/Resources/library/rimage' configure: error: Sorry, can't find fftw header ERROR: configuration failed for package 'rimage'
<動作環境> Mac OS X 10.4.6; Darwin 8.6.1。R for Mac OS X Version 2.3.1 (2006-06-01)
> sessionInfo() Version 2.3.1 (2006-06-01) i386-apple-darwin8.6.1 attached base packages: [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" "base"
kam (2006-08-29 (火) 14:37:57)
はじめまして。SPSSのデータをRで読み込んだ際のラベルの取り出しについて質問させてください。
例えば以下のようなSPSSのsavデータ「test.sav」があった場合Q1 Q2 1 2 3 3 2 2 4 1 5 2Q1にSPSSで"国語"、Q2に"算数"とラベル付けしたとして、それをRでdata1として以下のようにして読み込みました。
library(foreign) data1 <-read.spss("test.sav",use.value.labels=F,to.data.frame = T)ここで、SPSSで使っていた変数へのラベルをRでも使いたいと思い、取り出す方法を調べていたのですが、分からず困っています。
> attributes(data1) $names [1] "Q1" "Q2" $row.names [1] "1" "2" "3" "4" "5" $class [1] "data.frame" $variable.labels Q1 Q2 "国語" "英語"attributes()を使うと、上のようにvariable.labelsとして読み込んでいるようなのですが、variable.labels(data1)としてもそのようなfunctionは無いというエラーメッセージがでるだけで、"国語"という形で取り出すことができません。
大変初歩的というのは自覚しているのですが、variable.labels、変数名、spssなどのキーワードで、こちらのサイト、リンク先の初心者マニュアル、及びgoogleで調べていても分からず、助言を求めに来た次第です。
使用環境は、Win-XP,RはVersion 2.3.0 です。
実際に扱うSPSSのsavデータは変数が170あり、できればSPSSのラベルをそのままRでも利用したいという状況です。
質問の作法については目を通したのですが、不適切でしたらご指摘ください。よろしくお願いいたします。
ニョロニョロ (2006-08-24 (木) 15:03:05)
おかしなことが生じているので,問題を再現できる最小のデータと共におうかがいします。
test.dat というファイル名で,コードは UTF-8, 改行コードは LF,タブ区切りです。
中身は以下の通り(3行,2列)変数・あ 変数・ん 1 2 3 6このデータファイルを読んで,表示したところは何ともなさそうに見えるのですが,
> x <- read.table("test.dat", header=TRUE) > x 変数.あ 変数.ん 1 1 2 2 3 6変数名が変なんです。どうも,ナカグロの変換にともなって,何か変なことが起こっているようです。
> colnames(x) [1] "変数.あ?0<82>" "変数.ん?0<93>"コードを EUC-JP にしても,同じようになっています。
R初心者 (2006-08-24 (木) 10:48:40)
factor関数でいくつかのカテゴリ変数を1つに纏める方法なんてのはあるのでしょうか?
例えば数量化I類で分析した結果、いくつかのカテゴリ変数が有意ではない、と認められた場合、いくつかのカテゴリ変数をひとつにまとめてしまいたい場合、Microsoft Excelなんかでデータをエディットしてまた再読み込み・・・・なんて手順を踏んでいたんですが、どうせならR上で修正してしまいたいのです。
是非お知恵をお貸し下さい。
> x <- c(5, 1, 4, 3, 3, 2, 5, 3, 3, 4) > factor(x, labels=c(1,1,2,3,4)) [1] 4 1 3 2 2 1 4 2 2 3 Levels: 1 1 2 3 4 > factor(x, labels=c(1,1,1,2,2)) [1] 2 1 2 1 1 1 2 1 1 2 Levels: 1 1 1 2 2
> x <- c(1,2,2,3,4,5,5,5,6) > factor(x) [1] 1 2 2 3 4 5 5 5 6 Levels: 1 2 3 4 5 6 > x[x==6] <- 5 > factor(x) [1] 1 2 2 3 4 5 5 5 5 Levels: 1 2 3 4 5