新規投稿はできません
sumi (2008-11-15 (土) 12:14:00)
初歩的な質問で大変恐縮です。
主成分分析したものをバリマックス回転、もしくはプロマックス回転するためにはどうしたらよいのでしょうか?
また因子分析を実行しようとすると「これらの初期値からは最適化できません」と出てしまいます。
R version 2.7.2 (2008-08-25) 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 base
野沢菜 (2008-11-14 (金) 21:52:52)
お世話になります。
ARモデルのAIC値について質問致します。
どうやらRのARモデルのAIC値は最小モデルの値を0とし、相対値を返して来ていると言うのまでは判ったのですが、それにしても計算が合わないので、困っています。
以下のような実験をしてみました。
まずNileをAR(2)で計算させると
ar(Nile,order=2)
Call:
ar(x = Nile, order.max = 2)
Coefficients:
1 2
0.4081 0.1812
Order selected 2 sigma^2 estimated as 21247
sigma^2を21247と推定してきました。同様にar(Nile,aic=FALSE,order.max=3) とやると、21204 と推定してきます。
ここでAICを求めると、
ar(Nile,order=3)$aic
0 1 2 3
27.8938963 1.3373691 0.0000000 0.7625609
と、AR(2)が最小で0、AR(3)は0.7625609だと言っています。一旦整理します。
AR(2)σ^2 = 21247
AR(3)σ^2 = 21204
AR(2)AIC = 0.0000000
AR(3)AIC = 0.7625609
と言う事なのですが、回帰のAICでlength(Nile)が100なのでAICを計算させて
差をみると
n<-100;si2<-21247;m<-2;
AIC2 <- n*(log(2*pi)+1+log(si2))+2*(m+2)
n<-100;si2<- 21204;m<-3;
AIC3 <- n*(log(2*pi)+1+log(si2))+2*(m+2)
AIC3-AIC2
[1] 1.797413
と、AR(3)AIC = 0.7625609 とは、かけ離れた値になってしまいます。
私は、どこをどう間違っているのか、ご指摘をお願い致します。
flyer (2008-11-11 (火) 15:25:38)
いつもお世話になっています。
以下のようなデータで分散分析を二元配置の対応なしで分散分析を行おうとしたのですが、summary(aov(***))で得られるデータがF値のないものとなります。
収穫量に対しての要因が品種と試験場が存在すると言う設定なのですが、aovの使い方が違うのでしょうか。
よろしくお願いします。
収穫量
[1] 68 70 72 71 73 74 73 74 73 73 72 74 73 71 72 69 71 72 72 69品種
[1] A1 A1 A1 A1 A1 A2 A2 A2 A2 A2 A3 A3 A3 A3 A3 A4 A4 A4 A4 A4Levels: A1 A2 A3 A4
試験場
[1] B1 B2 B3 B4 B5 B1 B2 B3 B4 B5 B1 B2 B3 B4 B5 B1 B2 B3 B4 B5Levels: B1 B2 B3 B4 B5
> summary(aov(収穫量~試験場*品種))
> Df Sum Sq Mean Sq
>試験場 4 8.2000 2.0500
>品種 3 26.8000 8.9333
>試験場:品種 12 22.2000 1.8500
> summary(aov(収穫量~試験場+品種)) Df Sum Sq Mean Sq F value Pr(>F) 試験場 4 8.2000 2.0500 1.1081 0.39711 品種 3 26.8000 8.9333 4.8288 0.01982 * Residuals 12 22.2000 1.8500 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
たけ (2008-11-10 (月) 22:05:27)
下記のようなデータセットで、地点 緯度 経度 年 月の列と各種類の列を持つ表に書き換えたく、xtabsとftableを下記のように実行したのですが、2点問題があり困っております。
1)地点 緯度 経度 年 月全部の組み合わせを出力してしまい、整形が必要ですし、大きなデータになると実行時間がかかりメモリもパンクします。
2)出力されたテーブルは行の値は属性として入った状態になっており、y[3,]などと行を取り出す指定をしても、地点名や緯度経度の入った行の値を取り出すことは簡単にはできません。間を空けずに各行に地点名などの値を格納したいのです。
以上の2点について、xtabsとftableを用いたものでなくても構いませんので、うまい対処方法をご存知の方がいましたらお教え頂ければ幸いです。
x <- read.csv("test.csv") y <- ftable(xtabs(値~地点+緯度+経度+年+月+種類,x))
データの例:test.csv 年,月,地点,緯度,経度,種類,値 平成15年,1月,東京,139.766084,35.681382,いちご,10 平成15年,8月,東京,139.766084,35.681382,いちご,20 平成16年,1月,東京,139.766084,35.681382,いちご,10 平成16年,8月,東京,139.766084,35.681382,いちご,25 平成15年,1月,つくば,140.111234,36.082744,いちご,10 平成15年,8月,つくば,140.111234,36.082744,いちご,30 平成16年,1月,つくば,140.111234,36.082744,いちご,10 平成16年,8月,つくば,140.111234,36.082744,いちご,45 平成15年,1月,東京,139.766084,35.681382,みかん,100 平成15年,8月,東京,139.766084,35.681382,みかん,20 平成16年,1月,東京,139.766084,35.681382,みかん,100 平成16年,8月,東京,139.766084,35.681382,みかん,25 平成15年,1月,つくば,140.111234,36.082744,みかん,100 平成15年,8月,つくば,140.111234,36.082744,みかん,30 平成16年,1月,つくば,140.111234,36.082744,みかん,100 平成16年,8月,つくば,140.111234,36.082744,みかん,45
x <- read.csv("test.csv") y <- ftable(xtabs(値~地点+緯度+経度+年+月+種類,x)) a <- data.frame(y) b <- a[a$Freq>0,] b[b$地点=="つくば",] b[b$緯度=="140.111234",] b[b$種類=="みかん",]
> library(reshape) > x <- read.csv("c:/test.csv") > colnames(x)[6]<-"variable" > colnames(x)[7]<-"value" > y<-cast(x) > y 年 月 地点 緯度 経度 いちご みかん 1 平成15年 1月 つくば 140.1112 36.08274 10 100 2 平成15年 1月 東京 139.7661 35.68138 10 100 3 平成15年 8月 つくば 140.1112 36.08274 30 30 4 平成15年 8月 東京 139.7661 35.68138 20 20 5 平成16年 1月 つくば 140.1112 36.08274 10 100 6 平成16年 1月 東京 139.7661 35.68138 10 100 7 平成16年 8月 つくば 140.1112 36.08274 45 45 8 平成16年 8月 東京 139.7661 35.68138 25 25で、dataframeにするには、
>z<-data.frame(y)
> b[b$種類=="みかん",1] [1] 東京 つくば 東京 つくば 東京 つくば 東京 つくば Levels: 東京 つくば > b[b$種類=="みかん",2] [1] 139.766084 140.111234 139.766084 140.111234 139.766084 140.111234 139.766084 140.111234 Levels: 139.766084 140.111234
Shiro (2008-10-31 (金) 06:56:27)
たとえば、各年のデータを含むデータフレーム、
df.2000, df.2001, df.2002, df.2003, df.2004, df.2005
があるとし、これを以下のようにバインドするとします。
df.all <- rbind (df.2000, df.2001, df.2002, df.2003, df.2004, df.2005)
しかし、もしもバインドしたいデータフレーム数が膨大に増えてくると、書き連ねるのが長くなってしまいます。
そこで、下記のようにデータフレーム名を作成してみました。
period = c(2000:2005)# データフレーム名の作成
paste("df", period, sep = ".")
[1] "df.2000" "df.2001" "df.2002" "df.2003" "df.2004" "df.2005"
そして、これでは単なるcharacterなので、get関数で下記のようにしてみましたが、うまくいきません。
df.all <- rbind (get(paste("df", period, sep = ".")))
初心者です。調べた結果、pasteで名前を作るまではできたのですが・・・その次のステップでgetくらいしか見つけられず、苦慮しています。お力添えを頂ければ大変ありがたいです。
x <- rnorm(10) y <- rnorm(10) eval(parse(text="cbind(x, y)")) eval(parse(text="12+34"))
period <-c(2000:2005) dfname<-paste("df.", period, sep = "",collapse=",") text<-paste("df.all <- rbind (",dfname,")",sep="") eval(parse(text=text))
df.all <- do.call("rbind",lapply(paste("df", period, sep = "."),get))
tt (2008-10-31 (金) 02:55:21)
非常に初歩的な質問なんですが、hist()を使うときに、横軸の範囲を指定するにはどうしたらよいのでしょうか?
[[ ]] (2008-10-29 (水) 21:32:23)
postscript(file, family="Japan1Ryumin") で作る,日本語フォントを含む eps ファイルは,「不正なepsファイルだ」と言われて,Photoshop 等では開くことが出来ません。LaTeX からは \includegraphics でちゃんと挿入できるんですけど。どこかを弄ることで,解決されるのでしょうか。
postscript(file) でローマ字だけのファイルなら,問題は生じません。
Windows, Mac 共に,同じ問題があるようです。
初心者random (2008-10-26 (日) 14:24:04)
教えてください。以下のデータ(data01)は、
2元配置の変量モデル(変量因子groupAと変量因子groupB、それぞれ要因化)
における、2つの変量因子のeffectへの影響を解析するものです。
random効果として、groupAおよびgroupBを指定し、関数lme()を用いて解析したいのですが、
random効果の項の設定をうまくできません。
random効果として、
groupA+groupB+groupA*groupB ---(1)
を設定したく考えております。
model<-lme(effect~1,random=***) この部分(***)の設定がわかりません。
これまで、random=~1|groupA, random=~1|groupA/groupBは試みましたが、
(1) groupA+groupB+groupA*groupB
の設定ができず、質問させていただきました。
よろしくお願いします。
data01groupA groupB effect1 1 1 13.2
2 1 1 11.9
3 1 2 16.1
4 1 2 15.1
5 1 3 9.1
6 1 3 8.2
7 2 1 22.8
8 2 1 18.5
9 2 2 24.5
10 2 2 24.2
11 2 3 11.9
12 2 3 13.7
13 3 1 21.8
14 3 1 32.1
15 3 2 26.9
16 3 2 28.3
17 3 3 15.1
18 3 3 16.2
19 4 1 25.7
20 4 1 29.5
21 4 2 30.1
22 4 2 29.6
23 4 3 15.2
24 4 3 14.8
psa (2008-10-24 (金) 10:24:29)
par(tck=1)でグラフ上に罫線を入れたのですが、その罫線を好きなように変更したいと考えています。たとえば、x軸の10ごとに点線の罫線をいれて、50のところを太い罫線にするようなコンビネーションはどうしたらできますでしょうか?プログラムは以下のようにしています。よろしくお願いいたします。
par(tck=1)
plot(1:100)
> plot(1:100) > abline(v=0:10*10, lty=3) > abline(v=50, lwd=2)
taromaru (2008-10-23 (木) 16:42:25)
WindowsXP上で、R2.7.2を使っております。epsファイルをRから作ってtexに読み込もうとすると、ghostscriptがうまくビットマップファイルを作ってくれず、dviファイルに図が表示されません。例えば、
hist(rnorm(100)) dev.copy2eps(file="temp.eps")
temp.epsというファイルはできますが、tex に読み込んでコンパイルしたあとdviファイルを開くと
Failed to make temp.bmp by the command
というエラーメッセージが出て、dviファイルには図が表示されません。Ghostscriptのヴァージョンは、8.63です。そこで、GSView4.9で temp.eps を開こうとすると、
Unknown in Prolog section at line 34:%%IncludeResource: CID fake Bold font HeiseiKakuGo-W5
Unknown in Prolog section at line 71:%%IncludeResource: CID font HeiseiKakuGo-W5-EUC-H
(以下省略)
といったエラーメッセージが出て開けません。そこで、
dev.copy2eps(file="temp.eps", paper="special", onefile=FALSE)
といったオプションもつけてみましたが、結果は同じです。どなたかご教示いただけないでしょうか。
Saito (2008-10-22 (水) 21:35:20)
いつもお世話になっております。
似たような質問、トピックを捜しましたが見当たらなかったため質問させてください。
手持ちのデータに当てはまりそうな関数を自分で作成して、そのパラメータを最尤推定するにはどのようにすればよいでしょうか。例えば、私が今手元に持っているデータは、a<-rep(0,50) b<-rep(1:2,length=50) c<-rep(3:10,length=50) d<-c(a,b,c) d2<-as.data.frame(table(d)) d2$Freq<-(d2$Freq)/d2[1,2] plot(d2$d,d2$Freq)のような形をしており、これに尤もらしく当てはまりそうな関数として、
f<-function(sig,beta) 1-exp(-(as.numeric(d2$d)/sig)^-(beta))を関数例として考えました(あんまりいい例ではないかもしれませんが…)。このパラメータsigとbetaの値を最尤推定したいのです。最尤法はもちろん、optim()、mle()、fitdistr()などは勉強したのですが、何か勘違いしているのか他に適切な関数があるのか、中々思うようにいきません。どなたか、ご存知の方がいらっしゃいましたら手法などご教授いただけると幸いです。
なお、環境はWindowsXP、R-2.7.2です。
よろしくお願いいたします。
> # f<-function(sig,beta) 1-exp(-(as.numeric(d2$d)/sig)^-(beta)) > a <- rep(0,50) > b <- rep(1:2,length=50) > c <- rep(3:10,length=50) > d <- c(a,b,c) > d2 <- as.data.frame(table(d)) > d2$d <- as.integer(d2$d) # d2 が factor は百害あって一利なし > d2$Freq <- (d2$Freq)/d2[1,2] > plot(d2$d,d2$Freq) > ans <- nls(Freq~1-exp(-(d/sig)^(-beta)), data=d2, start=list(beta=1, sig=1)) > summary(ans) Formula: Freq ~ 1 - exp(-(d/sig)^(-beta)) Parameters: Estimate Std. Error t value Pr(>|t|) beta 1.5905 0.2278 6.981 6.46e-05 *** sig 1.8398 0.1852 9.933 3.79e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.07757 on 9 degrees of freedom Number of iterations to convergence: 8 Achieved convergence tolerance: 3.585e-06 > x2 <- seq(min(d2$d), max(d2$d), length=300) > y2 <- predict(ans, newdata=data.frame(d=x2)) > lines(x2, y2, col="red")
> AIC(ans) [1] -21.23610と返してくれるので、おそらく最尤推定をしてくれているのだとは思うのですが…。他の関数だと違った結果になるのでしょうか…?引き続き試しているのですが、うまくいかないです…。--Saito 2008-10-23 (木) 10:03:47
> spl <- rnorm(100) #サンプルを準備、平均0標準偏差1の正規分布 > sum(dnorm(spl, 0, 1, log=T)) #確率密度を掛け合わせたものが尤度なので、対数を取って合計すると対数尤度 [1] -144.8611 > sum(dnorm(spl, 1, 1, log=T)) #平均と標準偏差が異なると尤度は小さくなる [1] -198.297 > sum(dnorm(spl, 1, 2, log=T)) #平均と標準偏差が異なると尤度は小さくなる [1] -187.8094 #この(対数)尤度を最大にするのが最尤法 > eval_fn <- function(x, spl){ + m <- x[1] + sig <- x[2] + -sum(dnorm(spl, m, sig, log=T)) #optimは最小化なので「-」マイナスをつける + } #平均と標準偏差をパラメータにした関数を定義する #x[1]が平均、x[2]が標準偏差、splはサンプル > eval_fn(c(1,1), spl) [1] 198.297 > optim(c(1,1), eval_fn, lower=c(-Inf, 0.001), method="L-BFGS-B", spl=spl) #標準偏差は正の実数なので小さな実数を下限にする $par [1] -0.03435954 1.02867148 #1番目が最尤法で求められた平均、2番目が標準偏差 $value [1] 144.7206 #尤度関数の値、マイナスをつけたので正になっている $counts function gradient 30 30 $convergence [1] 0 $message [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH" > mean(spl) [1] -0.03435954 #実際のサンプルの平均、まったく同じ > sd(spl) [1] 1.033853 #標準偏差、最適化の精度の関係で若干上の数値が違う
> a<-rep(0,50) > b<-rep(1:2,length=50) > c<-rep(3:10,length=50) > d<-c(a,b,c) #これがサンプル > f<-function(x, spl){ + sig <- x[1] + beta <- x[2] + -sum(log(1-exp(-(spl/sig)^-(beta)))) + } > f(c(1.5,1.5), d) [1] 129.5854 > optim(c(1.5,1.5), f, lower=c(0.001, 0.001), method="L-BFGS-B", spl=d) $par [1] 17.294329 5.655511 $value [1] 1.433712e-09 $counts function gradient 27 27 $convergence [1] 0 $message [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"と、一応何か答えは出ました.
が、sigが大きくなると、確率密度関数がどんな観測値に対しても1を返すようになるのでsigは際限なく大きくなっていきます.関数形にどうも問題が・・・?これがうまくいかないということなのかな・・・
> f2<-function(x, spl){ + ramda <- x[1] + -sum(log(ramda*exp(-ramda*spl))) + } > f2(c(1.5), d) [1] 530.1802 > optim(c(1.5), f2, lower=c(0.001), method="L-BFGS-B", spl=d) $par [1] 0.3807116 $value [1] 294.8573 $counts function gradient 8 8 $convergence [1] 0 $message [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH" > hist(d) > plot(d, 0.38*exp(-0.38*d))
すみません、長くなりましたが私が最初やりたかったことはほとんど解決しています。ただ残る疑問として上記をまとめますと、 1.nls()とoptim()での違いは何か?別々の値が推定された場合どのように解釈すればよいのか? 2.xが離散値の場合、どちらが適切なのか? 3.2.でどちらでもよいというような場合、AICを用いてnls()とoptim()間でモデル選択を行うことはやってもよいのか?? です。ご教授いただければ幸いです。
ちなみに私がうまくいかないといっていたのは、functionの中身でsplに相当する部分をを変な組み込み方にしていたため、値が返ってこないというものでした。要はoptim()を理解できていなかったため起こったようです。-- Saito 2008-10-23 (木) 13:05:17
R初心者 (2008-10-22 (水) 18:41:13)
以下のような例は,どういう事になっているんでしょうか。UTF-8 だと,その順序だよと言うことでしょうか。> sort(c("青", "赤", "黄", "緑", "紫")) [1] "紫" "緑" "赤" "青" "黄"日本語の読みの順序でソートするにはどのようにしたらよいでしょうか。自分で関数を書かないといけませんか?
> sessionInfo() R version 2.8.0 Patched (2008-10-20 r46764) i386-apple-darwin9.5.0 locale: ja_JP.UTF-8/ja_JP.UTF-8/C/C/ja_JP.UTF-8/ja_JP.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods baseです。なんとなく予感がして,UNIX上のR-1.8.1(sessionInfo がありません(^_^;)だと,
> sort(c("青", "赤", "黄", "緑", "紫")) [1] "黄" "紫" "青" "赤" "緑" > Sys.getlocale() [1] "ja_JP.EUC/ja_JP.EUC/C/C/ja_JP.EUC/C"なるほど,なんとかできるのかな?
kanji <- c("黄","紫","青","赤","緑") x <- paste(kanji, collapse = " ") write(as.character(x), file = "hoge.txt" ) library(RMeCab) y <- RMeCabText("hoge.txt") yomi <- character(length(y)) for(i in 1:length(y)){ yomi[i] <- y[[i]][9] } kanji[order(yomi)] [1] "青" "赤" "黄" "緑" "紫" file.remove("hoge.txt") [1] TRUE
tottori (2008-10-20 (月) 03:08:30)
SVMの回帰への拡張であるSVRをkernlabパッケージにあるipopソルバー(Quadratic Programming Solver)を用いて解きたいと考えています。
分類(通常のSVM)の場合にはhelp(ipop)の例のように
H <- kernelPol(rbf,x,,y) c <- matrix(rep(-1,m)) A <- t(y) b <- 0 l <- matrix(rep(0,m)) u <- matrix(rep(C,m)) r <- 0
と指定することで動きますが、回帰の場合にはどのように指定すればよいか分かりません。ラグランジュ乗数が分類の場合と異なった形で出てくるため、自分なりに試行錯誤しましたが解決できませんでした。
kenlabに関する文献「kernlab – An S4 Package for Kernel Methods in R」のipopに関する記述の最後に[This optimizer can be used in regression, classification, and novelty detection in SVMs]とあり、回帰問題にも用いれると考えているのですが…
アドバイスを頂きたいです。
よろしくお願いします。
## regression # create data x <- seq(-20,20,0.1) y <- sin(x)/x + rnorm(401,sd=0.03) # train support vector machine regm <- ksvm(x,y,epsilon=0.01,kpar=list(sigma=16),cross=3) plot(x,y,type="l") lines(x,predict(regm,x),col="red")
kd (2008-10-16 (木) 10:23:37)
flicker雑音をRで生成する良い方法はあるでしょうか? (それとも,アルゴリズムを考えて書き下す方法しかないでしょうか?
C言語のプログラムの中身 (2008-10-15 (水) 15:44:22)
isoMDSという関数を改良したくて,中身を見たのですが,その中で
on.exit(.C(VR_mds_unload)) .C(VR_mds_init_data, as.integer(nd), as.integer(k), as.integer(n), as.integer(ord - 1), as.integer(order(ord) - 1), as.double(y), as.double(p)) tmp <- .C(VR_mds_dovm, val = double(1), as.integer(maxit), as.integer(trace), y = as.double(y), as.double(tol))
という部分がありました.調べた結果,「.C()」はC言語のプログラムを呼び出すものということが書かれていましたが,この中身,すなわちVR_mds_init_dataなどの中身を知りたい場合はどうすればよいのでしょうか?
よろしくお願いします.
ぬえ (2008-10-12 (日) 07:17:22)
散布図行列を描くときに、軸の下限値を0に固定(上限値は自動設定)って可能のなのでしょうか。
パラメータごとに値のレンジがかなり違うので、単純にxlim、ylimを指定するだけでは上手くいきません。
たぶん、xlim=range(x)というような処理がどこかでされてるんだと思うので
それをxlim=range(c(0,x))に変えられたらいいんですけど。
localPlot(x[, j], x[, i], xlab = "", ylab = "", axes = FALSE, type = "n", ...) を localPlot(x[, j], x[, i], xlab = "", ylab = "", axes = FALSE, type = "n", xlim=c(0, max(x[,j])), ylim=c(0, max(x[,i])), ...) に
syou6162 (2008-10-10 (金) 23:21:52)
Rのコマンドラインオプションなどで構文チェックをする方法はないでしょうか?R --helpやR CMDのほうのヘルプなども一通り見てみましたが、見つけることができませんでした。
Rubyで言えば
$ ruby -c hoge.rb
のようなものを考えています。
$ R -q -e 'is.expression(try(parse(file=commandArgs(trailingOnly=T)),silent=T))' --args hoge.R
Lee (2008-10-09 (木) 05:55:27)
おそらく非常に簡単にできるのではないかとは思うのですが、検索のキーワードが下手なせいか、適切な関数なり手段なりを見つけることができず、困っております。ご教示頂けたらとても助かります。
下のような2つのデータフレームにおいて、df.A のColumn1の値 (数字もしくは文字列) に一致するものをdf.B のColumn1からピックアップし、それに対応するdf.BのColumn2の値を、df.Aの横に加え、新たなデータフレームを作成したいのです。ここで、df.AのColumn1には、a, b, c, d が複数含まれますが、df.BのColumn1には、a, b, c, d, e, …はそれぞれ1つしかない、すなわち、1対1対応になっています。ただし、df.Aには含まれない g, h, …等もdf.Bには含まれます。
たとえば、df.AのColumn1は日付、Column2はその日に採取した複数のデータだとします。そして、df.BのColumn1とColumn2はそれぞれ日付とその日の降雨量だとします。そうすると、日付から降雨量のデータをピックアップして、その日に採取したデータとの関係を見るためのデータフレームを作成したい、ということになります。
df_A df_BColumn1 Column2 Column1 Column2Row1 a 5.5 Row1 a 102
Row2 a 2.6 Row2 b 203
Row3 a 3.2 Row3 c 302
Row4 a 5.6 Row4 d 202
Row5 b NA Row5 e 102
Row6 b 6.3 Row6 f 301
Row7 b 10.2 Row7 g 602
Row8 c 3.9 Row8 h 302
Row9 c 5
Row10 a 6
Row11 c NA
Row12 d 8.2
Row13 d 2.9
Row14 b 3.5
Row15 a 6.2
Row16 d 4.6
以下続く
新dfColumn1 Column2Row1 a 5.5 102
Row2 a 2.6 102
Row3 a 3.2 102
Row4 a 5.6 102
Row5 b NA 203
Row6 b 6.3 203
Row7 b 10.2 203
Row8 c 3.9 302
Row9 c 5 302
Row10 a 6 102
Row11 c NA 302
Row12 d 8.2 202
Row13 d 2.9 202
Row14 b 3.5 203
Row15 a 6.2 102
Row16 d 4.6 202
以下続く
df.A[[3]] <- df.B[df.A[[1]],2]で済みますが……。 -- 中澤 2008-10-09 (木) 10:41:44
tt (2008-10-08 (水) 16:31:54)
作業スペースの保存を実行すると、
以下にエラー gzfile(file, "wb") : コネクションを開くことができません追加情報: Warning message:In gzfile(file, "wb") :
圧縮されたファイル 'C:\Documents and Settings/…
とでできて保存できません。
どうしたらよいのでしょうか?
ISHIMARU (2008-10-08 (水) 16:25:40)
R-2.7.2をWindows XPで使用しています。
たとえば、a.Rというファイルにplot(1:5)と記載して、Rcmd BATCH a.Rと実行しても、
グラフが表示されず(残らず)、何事もなかったかのように終了してしまいます。
表示を残す方法があるのでしょうか。
初級Q&A アーカイブ(4) の「R CMD BATCHの使い方」を参考にして、
.Rprofileにlibrary(grDevices)と記載もしてみましたがだめでした。
よい方法がありましたらご教授ください。
library(graphics) library(grDevices) source("c:/a.r")
BEGIN { out = "a.R" print "pdf('a.pdf', width=5, height=4)" > out print "hist(rnorm(1000))" > out print "dev.off()" > out close(out) system("R --vanilla --slave < a.R") }これを,gawk -f a.awk のように呼び出す
林 (2008-10-07 (火) 14:26:12)
現在TechnoratiのAPIでブログの記事を引っ張ってきて,RMeCab等を用いて計量テキスト分析,というのに挑戦しています。
RMeCabに通す段階で,不可解な現象に出会い,困惑してしまいました。
APIの返り値はUTF-8なのですが,それがなぜかCP932のR上で文字化けせずに表示されてしまいます。
つまり,
text1 # APIで取得したテキスト
[1] "日本語" # 文字化けしない(text2 <- "日本語") # R上で付値
[1] "日本語" # 当然化けないtext1 == text2
[1] FALSE(iconv(text1, "UTF8", "CP932") == text2 # 明示的に変換
[1] TRUE
となります。変換せずそのままRMeCabに突っ込んだところ,「正しく」文字化けして返ってきました。
ということで,この問題自体は解決しているのですが,根本的な原因がわかりません。
なぜこのようなことが起こるのでしょうか?
(変な言い方ですが)ちゃんと化けてくれたほうがありがたいのですが,そのように設定することは可能でしょうか?
不明瞭な質問で申し訳ないのですが,よろしくお願いします。
環境は以下です。そのほか,設定はなにもいじっていません。
sessionInfo()
R version 2.7.2 (2008-08-25)
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 base
other attached packages:
[1] RMeCab_0.61 XML_1.96-0
loaded via a namespace (and not attached):
[1] tools_2.7.2
うち (2008-10-06 (月) 20:55:07)
grep(, value=T)で試してみましたが,マッチした文字列全体が返されてしまいます。正規表現にマッチした部分のみを取り出すには,どのようにしたら良いか御教示いただけないでしょうか。substring()を正規表現で制御するようなイメージです。> # /に挟まれた数字のみ抜き出したいが... > grep("(?<=/)\\d*(?=/)", c("2007/1/1","2007/2/2", "2007/12/31"), value=T, perl=T) [1] "2007/1/1" "2007/2/2" "2007/12/31"
> sessionInfo() R version 2.5.1 (2007-06-27) 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"akiraさんのご回答をコピペしたら,意図通りの動作をしました。ありがとうございます。sub()の使い方を勉強します。 -- うち 2008-10-06 (月) 22:09:15
> sub(".*\\/(.*)\\/.*","\\1",c("2007/1/1","2007/2/2", "2007/12/31")) [1] "1" "2" "12" > sub(".*/(.*)/.*","\\1",c("2007/1/1","2007/2/2", "2007/12/31")) [1] "1" "2" "12"
ssamu (2008-10-06 (月) 05:17:40)
こんにちは、お世話になります。
今までもっぱら文系の道を歩んできましたが、将来の研究のため統計ソフトの操作を身につけようと頑張ることにしました。
初歩的な質問で大変恐縮ですが、xtab関数を使用して得た結果を通常のdata.frameのように操作することってできますか?
(もしくは、data.frame形式に変換できないでしょうか?)
[,2]のように指定して列を切り出したり、という操作。
例えば、LanguageRのパッケージの中にあるwarlpiriというデータから
xtabs(~Speaker+CaseMarking, data = CaseMarking)
TABLE1=xtabs(~Speaker + CaseMarking , data = CaseMarking)
の様に集計を行ったとして、この「TABLE1」を再利用/加工したいのですが…。
間接的な回答でもご教示いただけると非常にありがたいです。
やぼてん (2008-10-04 (土) 16:19:23)
お世話になります。<R本読むだけ>から、ようやく<Rを使いはじめた>に状態levelを変えつつある初心者です。つぎのような重複データの処理がわからず困っています。
個体ごとに、生きている葉の数と死んでいる葉の数が数えあります。その結果、変数として、NO(=個体番号)、TREAT(=処理濃度(%))、D_or_A(=生死(0か1))、NO_LEAF(=葉の数)の4つが得られています。データは,たとえば
32 15 0 12
32 15 1 7
33 50 0 8
33 50 1 18
というものになります。
分かりたいのは、生きている葉の数、死んでいる葉の数をどのようにすれば解析中に入れられるのかということです?
glm(D_or_A ~ TREAT, binomial, weight=LEAF_NO)
としてもうまくいきませんでした。
よろしくお願いします。
32 15 12 7 33 50 8 18
> xy <- data.frame(NO=32, TREAT=15, D_or_A=0, LEAF_NO=12) > xy <- rbind(xy,c(32, 15, 1, 7), c(33, 50, 0, 8), c(33, 50, 1, 18)) > res_glm <- glm(D_or_A ~ TREAT, binomial, weight=LEAF_NO, data=xy) > res_glm Call: glm(formula = D_or_A ~ TREAT, family = binomial, data = xy, weights = LEAF_NO) Coefficients: (Intercept) TREAT -1.11754 0.03857 Degrees of Freedom: 3 Total (i.e. Null); 2 Residual Null Deviance: 61.83 Residual Deviance: 57.1 AIC: 61.1となって、一応エラーは出ずに済んでいるみたいですね.どのあたりが「うまくいきませんでした」なのかが、回答してくださる方が知りたいところなのかも!!?ただこの方法だと「生きている葉の数、死んでいる葉の数をどのようにすれば解析中に入れられるのか」ということでは、説明変数に入っているわけではないですね.これが「うまくいっていない」ということなのでしょうか・・・? -- ichigo 2008-10-06 (月) 13:26:33
> xy2 <- matrix(as.matrix(xy[1,1:3]),xy[1,4], 3, byrow=T) > xy2 <- rbind(xy2, matrix(as.matrix(xy[2,1:3]),xy[2,4], 3, byrow=T)) > xy2 <- rbind(xy2, matrix(as.matrix(xy[3,1:3]),xy[3,4], 3, byrow=T)) > xy2 <- rbind(xy2, matrix(as.matrix(xy[4,1:3]),xy[4,4], 3, byrow=T)) > xy2 <- data.frame(xy2) > colnames(xy2) <- c("NO", "TREAT", "D_or_A") > res2_glm <- glm(D_or_A ~ TREAT, binomial, data=xy2) > res2_glm Call: glm(formula = D_or_A ~ TREAT, family = binomial, data = xy2) Coefficients: (Intercept) TREAT -1.11754 0.03857 Degrees of Freedom: 44 Total (i.e. Null); 43 Residual Null Deviance: 61.83 Residual Deviance: 57.1 AIC: 61.1結果は、自由度の行以外まったく同じでした.これを見る限り先の【res_glm】の場合においても「weights」引数はきちんと機能しているようにも見えます.そして
> xy3 <- data.frame(NO=32, TREAT=15, D_or_A=7/19, LEAF_NO=19) > xy3 <- rbind(xy3, c(33, 50, 18/26, 26)) > res3_glm <- glm(D_or_A ~ TREAT, binomial, weights=LEAF_NO, data=xy3) > res3_glm Call: glm(formula = D_or_A ~ TREAT, family = binomial, data = xy3, weights = LEAF_NO) Coefficients: (Intercept) TREAT -1.11754 0.03857 Degrees of Freedom: 1 Total (i.e. Null); 0 Residual Null Deviance: 4.722 Residual Deviance: -2.761e-30 AIC: 10.93だと、自由度は1と(AICとかは違いますが)・・・自由度の考え方の件はその道の専門の方にお任せします・・・(私も知りたい・・・) -- ichigo 2008-10-06 (月) 18:04:08
うち (2008-10-03 (金) 19:58:06)
因子を置換(追加)する処理をしたいのですが,下記のようなコードで実行すると意図しない結果になってしまいます。置換対象を前もって文字列化しておくことで意図した処理はできたのですが,因子を直接置換(追加)する方法を教えていただけないでしょうか。> iris2 <- iris > unique(iris2$Species) [1] setosa versicolor virginica Levels: setosa versicolor virginica > > #Sepal.Length>7.5以上の種名をhogeに置換 > iris2$Species <- ifelse(iris2$Sepal.Length>7.5, "hoge", iris2$Species) > class(iris2$Species) #文字列になってしまう [1] "character" > iris2$Species <- as.factor(iris2$Species) #後で因子に変換しても > unique(iris2$Species) #変になってしまう [1] 1 2 3 hoge Levels: 1 2 3 hoge
> iris2$Species <- as.character(iris2$Species) #先に文字列化しておくと > > iris2$Species <- ifelse(iris2$Sepal.Length>7.5, "hoge", iris2$Species) > iris2$Species <- as.factor(iris2$Species) > unique(iris2$Species) #意図したようになる [1] setosa versicolor virginica hoge Levels: hoge setosa versicolor virginica
> str(iris2$Species) Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...このように、characterの後ろにカテゴライズされたnumeric(1 1 1 1の部分)が隠れています。factor typeは自動的に文字データをコード化してくれているのです。このあたりは他の言語とちがうので慣れが必要ですね。-- okinawa 2008-10-04 (土) 14:15:18
> iris2$Species <- gsub("versicolor","hoge", iris2$Species) > iris2$Species <- as.factor(iris2$Species) > unique(iris2$Species) [1] setosa hoge virginica Levels: hoge setosa virginica > str(iris2$Species) Factor w/ 3 levels "hoge","setosa",..: 2 2 2 2 2 2 2 2 2 2 ...
hm (2008-10-01 (水) 14:57:21)
行列xの要素は0と1の2値データです。(i) heatmapにおいてデフォルトでセルの色が2色以上になっているは、どのような意味があるのでしょうか?(ii) heatmapにおいてセルの色を0なら黒色、1なら赤色にしたいのですが、どうすればよろしいでしょうか?set.seed(101) x = matrix(sample(c(0,1), 100, replace=TRUE),10,10) heatmap(x)
x <- matrix(sample(c(0, 1), 100, replace=TRUE), 10, 10) plot(c(1, ncol(x)+1), c(1, nrow(x)+1), type="n", asp=1, bty="n", axes=FALSE, xlab="", ylab="") for (i in 1:ncol(x)) for (j in 1:nrow(x)) rect(i, j, i+1, j+1, col=1, density=c(0, 100)[x[j, i]])
set.seed(101) x = matrix(sample(c(0,1),25,replace=TRUE),5,5) rownames(x) = LETTERS[1:nrow(x)] heatmap(x, col=c("white","black"))
heatmap(x, scale="none")でどうでしょう?白黒にしたいなら
heatmap(x, scale="none", col=c("white","black"))でしょうか・・・? -- ichigo 2008-10-02 (木) 10:35:49
> heatmap(rbind(0,x), col=c("white","black")) > heatmap(rbind(1,x), col=c("white","black"))のような、同一行がすべて同じ値だった場合と推察.この場合も
scale="none"をつけると、うまくいく?
heatmap(x)だけの場合で2色以上使われるのは、行ごとにスケーリングされているためのようです.行ごとには2色しか使われていないようですが・・・ -- ichigo 2008-10-02 (木) 11:09:30
Kai (2008-10-01 (水) 13:51:45)
お世話になります。しょうもない疑問で申し訳ありませんが、以下について一考願えませんでしょうか?
使用環境
・Windows XP
・Meadow 3.00
・ESS-5.3.8
・R-2.7.1
において、日本語データを格納したデータをedit()で開くと、日本語のみ文字化けしてしまいます。ただし、
・Meadow上では、日本語データを文字化けさせないで表示できる
・edit上で、文字化けした項目を選択すると、正しい日本語が表示され、他の項目に移ると、文字化けしたものに戻ってしまう
・Rだけで同様の処理をすると、edit()上でも文字化けは起っていない
説明が不明瞭で申し訳ありませんが、Meadow+ESS+R環境で、edit()を用いてデータを表示させたときのみ、文字化けが発生しているようです。ただし、化けているだけで、実際の値は入っているようです。
文字化けをなくす方法はありませんでしょうか?
KW (2008-09-30 (火) 10:45:56)
初めまして,初歩的な質問で申し訳ないのですが,demo()やlibrary(help="")と入力すると以下のような警告メッセージが表示されます。
> demo() Warning message: In file.show(outFile, delete.file = TRUE, title = paste("R", tolower(x$title))) :
> library(help=stats) Warning message: In file.show(outFile, delete.file = TRUE, title = gettextf("Documentation for package '%s'", :
使用環境は以下の通りです。> sessionInfo() R version 2.7.2 (2008-08-25) 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 base > .libPaths() [1] "C:/PROGRA~1/R/R-27~1.2/library" > .packages(all.available = TRUE) [1] "base" "boot" "class" "cluster" "codetools" "datasets" "foreign" "graphics" [9] "grDevices" "grid" "KernSmooth" "lattice" "MASS" "methods" "mgcv" "nlme" [17] "nnet" "rpart" "spatial" "splines" "stats" "stats4" "survival" "tcltk" [25] "tools" "utils" ~
通常のhelpメニューは表示されます。またパッケージも普通に使えるので,問題はないと思います。pathやDoc関係で問題があると思うのですが,詳しい解決方法をご享受できればと思っています。よろしくお願いします。
Rei (2008-09-28 (日) 20:05:42)
お世話になります。
最新バージョン 2.7.2 をインストールしたところ、以前のバージョンではインストール時に日本語版にするという選択をしなければ、英語版になったと思うのですが、本バージョンではどうやっても日本語版になってしまいます。英語版にする、あるいは、英語版をインストールする方法をご存じの方がいらっしゃいましたらご教示頂ければ幸いです。
(1) 使用環境: Windows Vista
(2) 使用PC: 日本語PC
(3) インストールに使用する言語を英語にしたが同様であった。
(4) ミラーサイトをUSAでダウンロードしたが同様であった。
お団子 (2008-09-25 (木) 08:05:39)
Saitoさんごめんなさい間違った場所に投稿しました。再投稿します。
SASでは、次のようにプログラムすると、下記のような
分散の期待値が求められますが、これをRで実行する方
法(関数)はあるのでしょうか?
model Data = R A R(A) B A*B R(A B) / ss2 e2;
random R R(A) R(A B);
変動因 Type II 期待平均平方
R Var(Error) + Var(R(A*B)) + 2.8182 Var(R(A)) + 11 Var(R)
A Var(Error) + Var(R(A*B)) + 2.8765 Var(R(A)) + Q(A,A*B)
R(A) Var(Error) + Var(R(A*B)) + 2.7273 Var(R(A))
B Var(Error) + Var(R(A*B)) + Q(B,A*B)
A*B Var(Error) + Var(R(A*B)) + Q(A*B)
R(A*B) Var(Error) + Var(R(A*B))
想 (2008-09-23 (火) 15:52:51)
場所を間違えて質問してしまったようでご迷惑をお掛けいたしました。
以下原文ですが、宜しくお願いいたします。
「contour()ではカラーバーが自動的に右側に描写されますが
これをimageの方で表示することは出来ないのでしょうか?
helpを読んでもそのような記述は見当たらず・・・質問させて頂きます。」
wiki内でimageやカラーバーといった単語検索を試しましたが見つかりませんでした。。すみません。
NN <- 100 x <- 10*(1:nrow(volcano)) y <- 10*(1:ncol(volcano)) image(x, y, volcano, col = terrain.colors(NN), axes = FALSE) cols <- terrain.colors(NN) for( ii in 1:NN ){ rect(par()$usr[1]+(par()$usr[2]-par()$usr[1])/NN*(ii-1), par()$usr[3], par()$usr[1]+(par()$usr[2]-par()$usr[1])/NN*ii, par()$usr[3]+10, col=cols[ii] , border=NA) } rect(par()$usr[1], par()$usr[3], par()$usr[2]-1, par()$usr[3]+10, col=NA)
ichigo (2008-09-19 (金) 17:04:34)
たとえば>postscript() >plot(1:10) >dev.off()とすると
postscript 2と、デフォルトで表示されると思うのですが、これを出さない方法はありますでしょうか.
いろいろ試したり、検索したりしたのですがわからなくて困っています.
- options()には、これ関連のオプションはなさそう
- Rを起動するときの「--slave」オプションでも抑制できない.
- (dev.off())とかやっても、出力されてしまう(当然ですか(汗).
環境は R version 2.4.1 (2006-12-18)
i686-pc-linux-gnu
です.よろしくお願いします.
kd (2008-09-18 (木) 23:23:37)
data.frameに関するエラーメッセージ(下記例,R 2.7.2)なのですが,日本語としては,「列の長さ」の方が正確と思えるのですが(「列数」ではなくて),R(のdata.frame)では第1列(もしくは第2列)の「列数」という言い方をするのでしょうか?> test<-data.frame(c(1:2),c(1:3)) 以下にエラー data.frame(c(1:2), c(1:3)) : 引数は異なった列数を意味します: 2, 3
Saito (2008-09-17 (水) 22:50:20)
いつもお世話になっています。
似たような質問がないか探しましたが、見つけられなかったので質問させてください。(ただ、gstatパッケージでのクリギングについてという記事が最も近い感じではありました)
ある調査区域を調査して、区画ごとにそこにいた生物の個体数を数えています。サンプルとしては以下のようになります。点線で囲まれた30個の長方形がそれぞれの区画です(本当はx軸を0.1刻みで網をつけ、60個にしたかったのですがうまくいきませんでした。それについてもご教授していただけると幸いです)。lon=runif(20,131,132) lat=runif(20,46,49) ss=rpois(20,5) d=data.frame(lon,lat,ss) with(d, { plot(lon, lat, col=as.factor(ss), xaxp=c(131,132,10), ylim = c(46, 49), panel.first = grid(), ) } )ここで質問なのですが、それぞれの区画での合計発見数(ssの値に限らず1発見1カウント)、および総個体数(sum of ss)を算出するにはどのようなプログラムを書けばよいのでしょうか。tapplyやexpand.gridなどで色々やってはみたのですが…。
環境はWindowsXp, R-2.7.2です。
どうかよろしくお願いします。
lon2 <- floor(lon/0.1)*0.1 lat2 <- floor(lat/0.1)*0.1 table(lon2, lat2) # programmed by 一言居士後半は,
lon3 <- rep(lon2, ss) lat3 <- rep(lat2, ss) table(lon3, lat3) # programmed by 一言居士かな,ちょっと手抜きだけど。
xtabs(ss~cut(lat, seq(46,49,.5))+cut(lon, seq(131,132,.2)))とすべきだった。cut の結果を2回使うので,変数として取っておくとよい。
lat4 <- cut(lat, seq(46,49,.5)) lon4 <- cut(lon, seq(131,132,.2)) table(lat4, lon4) # xtabs(~lat4+lon4) と同じ xtabs(ss~lat4+lon4)蛇足ながら -- 一言居士 2008-09-18 (木) 07:24:54
lon=runif(20,131,132) lat=runif(20,46,49) ss=rpois(20,5) lat4 <- cut(lat, seq(46,49,.5)) lon4 <- cut(lon, seq(131,132,.2)) a3=xtabs(ss~lat4+lon4) a33=as.data.frame(a3) s<-rep(seq(46,48.5,.5),length(seq(131,131.8,.2))) s2<-s+0.5 r<-rep(seq(131,131.8,.2),each=length(seq(46,48.5,.5))) r2<-r+0.2 mean.lat<-(s+s2)/2 mean.lon<-(r+r2)/2 d3<-data.frame(a33$lat4,a33$lon4,mean.lat,mean.lon,a33$Freq) d3ただ、どうにも手動の部分が多く(s,rを作成するあたり)データが多くなってきたときにミスが発生しそうです。strsplitやsubstrなども試してみたのですが、うまくいきません。何か簡潔に平均座標を求めるやり方などアドバイスをいただけたら幸いです。 よろしくお願いします。 -- Saito 2008-10-09 (木) 17:50:04
米 (2008-09-17 (水) 17:50:44)
メニュバーから File | Source R code... を選択し,日本語を含むファイルパスにあるコードを読み込もうとすると,下記のようなエラーが発生します.
Error in file(file, "r", encoding = encoding) :cannot open the connectionIn addition: Warning message:
In file(file, "r", encoding = encoding) : cannot open file 'H:\・・渰渰dž>
OSはWindowsXP,Rのバージョン2.7.1です.ちなみに,R-2.4.1では,全く同じマシン環境で全く同じ操作をしても問題無しでした.どなたか解決策を教えていただけないでしょうか.
basel (2008-09-17 (水) 12:16:01)
ans<-glm(y~x,family=binomial(link="logit"),data=ds)
でロジスティック回帰分析を行った後に、「SommersD」を求めたいのですが、どのようにしたら良いのでしょうか?
マーケター (2008-09-16 (火) 17:18:27)
コンジョイント分析のできるパッケージはないでしょうか
z <- x <- rep(1:2, each=4) m = 1 for (i in 1:90000) { y <- sample(x) if (cor(x, y) == 0 && y[1] == 1) { tmp <- cbind(z, y) if (sum(abs(cor(tmp)-diag(m+1)))==0) { z <- tmp m <- m+1 print(m) } } } # programmed by 一言居士 > z z y y y y y y [1,] 1 1 1 1 1 1 1 [2,] 1 2 1 1 2 2 2 [3,] 1 1 2 2 2 1 2 [4,] 1 2 2 2 1 2 1 [5,] 2 2 1 2 2 1 1 [6,] 2 2 2 1 1 1 2 [7,] 2 1 1 2 1 2 2 [8,] 2 1 2 1 2 2 1 > cor(z) z y y y y y y z 1 0 0 0 0 0 0 y 0 1 0 0 0 0 0 y 0 0 1 0 0 0 0 y 0 0 0 1 0 0 0 y 0 0 0 0 1 0 0 y 0 0 0 0 0 1 0 y 0 0 0 0 0 0 1そのほかの直交表も,rep(1:2, each=4) のところを変えればできるでしょう。 -- 一言居士 2008-09-16 (火) 22:09:50
R初心者 (2008-09-15 (月) 16:38:52)
複数の遺伝子の発現を数時間毎に測定し、それをデータとしてまとめて、その発現のパターンをRを用いてクラスタリングしようと考えています。
その際に、1,2,3...と2,3,4...といったような、生じる値は異なっていても、数字の変動の傾向(例の場合だと、1ずつ増えるのでパターンが似ている。)がよく似ているもの同士(つまり、増え方を考慮しないもの。y=xとy=x+1のような関係であるもの)をクラスタリングするスクリプトはどうつくればいいのか、途方にくれています。ご存知の方がいらっしゃたら教えてください。宜しくお願いします。
Saito (2008-09-11 (木) 20:34:09)
いつもお世話になっています。
既出でしたら申し訳ありません。似たような例を探したのですが、見当たらなかったので質問させてください。たとえばforなどを使って順に計算された値をすべて書き出すにはどのようにかけばよいでしょうか。たとえば、0,1を99個生成しそれぞれを数えたものと、100個生成しそれぞれ数えたものをくっつけると、> r=0 > t=0 > for(i in 1:99){ > ifelse(sample(0:1,1)==0,r<-r+1,t<-t+1) > } > c1=data.frame(r,t) > > r=0 > t=0 > for(i in 1:100){ > ifelse(sample(0:1,1)==0,r<-r+1,t<-t+1) > } > c2=data.frame(r,t) > c3=merge(c1,c2,all=T) > c3 > r t > 1 45 54 > 2 48 52となります。ここでは99と100というたった2つの場合ですが、本当は反復数を自動で変えてもっと多くして、rとtの値を一覧で見たいのですが、なかなか思うようにできません。どなたかご教授いただけたら幸いです。
なお、OSはWindowsXp、Rのバージョンは2.7.2です。
> func <- function(n) { # 実験の記述 + x <- sample(0:1, n, replace=TRUE) + t <- sum(x) + r <- n-t + return(c(r=r, t=t)) + } # programmed by 一言居士 > sapply(sample(50:100, 5, replace=TRUE), func) # 5 回実験してみよう [,1] [,2] [,3] [,4] [,5] r 48 32 39 35 26 t 49 31 39 25 33
s=sapply(sample(1:100, 5000, replace=TRUE), func) t=t(s) plot(t)という図を作りたかったのです。といいますのも、論文である理論値からの対称性について言及を行うつもりで、その対称性というのが上記で示した1,0の乱数がx軸の値が大きくなるにつれて生成される割合も多くなるという性質のものだったからです。確かに最初はrbinomで試したのですが理解が不十分なためうまくいかず、仕方なく具体例を示したのでした。わかりにくく、手間を取らせてしまい申し訳ありませんでした。 -- Saito 2008-09-11 (木) 22:02:50
basel (2008-09-11 (木) 19:36:05)
たとえばboxplotを作図してjpegで保存したい場合、
bp<-boxplot(a~b)
save(bp,file="bp.jpeg")
ではだめだったのですが、何が原因なんでしょうか?
hanageishi (2008-09-09 (火) 12:02:03)
clip()が期待通りに動作してくれません。
使用環境は WindowsXP, R version 2.7.1 (2008-06-23)です。
以下のようにすれば、par()$usrはc(0.96,2.04,2.96,4.04)ですが、clip()の値は左側に広げてあるので、(0.96,3.2)の点はaxisにかかるものの半欠けにならないことを期待しました。ところが実際には半欠けになります。> windows() > plot(1:2,3:4) > clip(0.9,2,3,4) > points(0.96,3.4)ところがなぜか、そのあともう一度clip()を呼び出すと、今度は半欠けにならずにプロットされます。
> clip(0.9,2,3,4) > points(0.96,3.2)ただclip()を二回立て続けに呼び出しただけではだめなようで、clip()の前にpoints()が実行されていることが必要のようです。そこまでは分かったのですが、原因が分かりません。ちなみにplot()以降は、par()の中身は一切変更されていなかったようです。もしどなたか原因をお分かりでしたらご教示ください。
maruru (2008-09-03 (水) 03:19:25)
正規分布で平均値、標準偏差、0.025、0.975、サンプル数が既知の時、簡単にquantleを推定する方法が無いかなあと思いまして、初心者ゆえ安直なことを考えたのですが、教えていただけますでしょうか?
> qnorm(0.75, mean=50, sd=10) # programmed by 一言居士 [1] 56.7449上から2.5%目のものの得点はいくつか。
> qnorm(0.975, mean=50, sd=10) # programmed by 一言居士 [1] 69.59964それが,なにか? -- 一言居士 2008-09-03 (水) 21:10:51
lis-kyoto (2008-09-02 (火) 17:16:15)
SUSEのunixにRをyast2からインストールしまして、
確率分布を描くプログラムを実行させようとしましたところ、
Error in X11(): X11 module cannot be loaded
In addition: Warning messeage:
In X11(): unable to load shared library '/R/modules//R_X11.so':/usr/lib/R/modules//RR_X11.so: undefined symbol: cairo_image_surface_get_data
というエラーでできませんでした。(WindowsでRをインストールして実行したときは問題なく実行できてました。)
もともと、SUSEにインストールの時にも、cairoがないとか言われたのですが、
X11も、cairoもunixにはちゃんと入っていたので無視してインストールしてしまっていました。
なにかpathが通っていないのか、Rの問題なのか、調べてみたのですが、初心者でまったくわからないので、教えていただけますでしょうか。
setHook(packageEvent("grDevices", "onLoad"), function(...) grDevices::X11.options(type="Xlib"))などと買いて, cairoを無効にしてみて下さい. -- なかま 2008-09-02 (火) 17:31:16
伊太利屋次郎 (2008-09-01 (月) 12:44:11)
OSX 10.5.4でR 2.7.2を使用しています。実害はない(?)と思いますが,Rパーケージインストーラーのソース,バイナリーともに一覧を表示させると,パッケージが二重に表示されます。導入済みパッケージ(バイナリー,ソースともに)のバージョンは必ずしも,同じポジション(すべての導入済みパーケージが二重表示の上段だけにまたは下段だけに)に表示されるとは限りません。
どうなっているのでしょうか?
Koichi (2008-09-01 (月) 01:44:08)
お世話になります。2次元の散布図を作成しようとして、表題の件で行き詰っ
ています。
hoge <- matrix( c( 1, 1, "label1", 1, 0.99, "label2", 1, -1, "label3(this is long)", -1, 1, "label4(long again)" ), ncol=3, nrow=4, byrow=TRUE ) plot(hoge) text(hoge, hoge[,3], pos=1)
このようにラベルをそのままプロットすると、ラベル同士が重なったり、ラベ
ルの一部がプロットエリアの外に出てしまったり(表示されなかったり)しま
す。
目標は、上のhogeのようなデータを元に、以下のようなプロットを自動的に
生成することです。
fuga <- matrix( c( 0.85, 1, 0.95, 0.9, 0.75, -0.9, -0.7, 1 ), ncol=2, nrow=4, byrow=TRUE ) plot(hoge) text(fuga, hoge[,3])
このように自動的にラベル位置を調節してくれるような関数はありますでしょ
うか? identify関数が、これに近いこと(なるべく空いたスペースにラベル
表示)をやってくれるようなのですが、点を1つずつクリックしていくという
のは少し厳しいものがあります。お知恵をかしていただけましたら幸いです。
library(maptools) pointLabel(x=as.numeric(hoge[,1]),y=as.numeric(hoge[,2]),labels=hoge[,3],cex=.5)地図のラベルではよくある問題です
マーサ (2008-08-31 (日) 14:19:21)
始めまして!マーサと申します。
Rは2日目の初心者です、Rの解説本を読みながら手探りで勉強を始めましたがもうギブアップ状態です。
下記にcsvデータと試したコマンドを記述してみます。
このcsvデータ(データ数は710個)から時系列の棒グラフを作成する方法を教えてください。
日付 天山高
2001/10/2 2
2001/10/3 61
2001/10/4 4
2001/10/5
2001/10/6 3
2001/10/7 2
2001/10/8
2001/10/9 2
入力したコマンド
x <- read.csv("C:/R-sample/IJT.csv"))
barplot(x) # 以下にエラー barplot.default(x# 'height' はベクトルか行列でなければなりません以上です、またこのデータは項目が1個ですが、元データは日付に対して12の項目があります、1画面に4行、3列のグラフを表示させる方法も教えてください。
日付 天山高 天山低 天山微 天山その他 眼鏡岩高 眼鏡岩低 眼鏡岩微 眼鏡岩その他 摺鉢山高 摺鉢山低 摺鉢山微 摺鉢山その他
2001/10/2 2 6 2 11 6
2001/10/3 6 1 7 1 145 8 1 16 1
2001/10/4 42 2 2 2 3
2001/10/5 3 3 3 3 1
2001/10/6 3 4 3 4 1
2001/10/7 2 1 2 1 1 1
2001/10/8 1 1
2001/10/9 2 1 2 3 2 2
barplot(x[,2], names.arg=x[,1]) # programmed by 一言居士画面を区切って複数のグラフを描く方法は,layout を調べましょう。 -- 一言居士 2008-08-31 (日) 15:23:25
basel (2008-08-28 (木) 15:50:56)
ans<-step(glm(y~x,data=df)
とステップワイズ法を実行するとき、上・下限値の設定の仕方を、どなたかご教授願います。
sasでいうところのslentry,slstayをどのようにコメントすればよいのでしょうか
Koichi (2008-08-22 (金) 01:09:40)
Windows XPでR 2.6.2を使用しております。以下のようにしてRから
出力したEPSファイルが、Ghostscript7.07で表示できず(TeX文書
に貼り付けることができず)困っております。plot(0,main="ほげ") dev.copy2eps(file="c:\\hoge.eps", family="Japan1Ryumin")Ghostscript 8.63では表示できるのですが、できればまだ8.xxには
移行したくありません。7.07の設定が悪いのかと思って、試行錯誤
しているのですが、なかなか上手く行きません。現在のCIDFnmapの
中身は以下のようになっています。/Ryumin-Light /MS-Mincho ; /GothicBBB-Medium /MS-Gothic ; /HeiseiMin-W3 /Ryumin-Light ; /HeiseiKakuGo-W5 /GothicBBB-Medium ; /MS-Mincho (msmincho.ttc) 1 ; /MS-Gothic (msgothic.ttc) 1 ;
GS7.07の設定のヒント、あるいは、「うちではGS7.07でも
ちゃんと見えているよ」といった情報等、教えていただけ
ましたら幸いです。
なお、GS7.07のエラーは以下のようなものがでています。Error: /undefinedresource in --findresource-- Operand stack: Ryumin-Light-Bold basefont-H .basefont-H Identity-H --nostringval-- CMap Identity-H CMap Identity-H Execution stack:(後略)
basel (2008-08-20 (水) 17:46:59)
glmのリンク関数"logit"で変数選択する場合、ステップワイズ法を利用したいのですが、どのようにすればよいのでしょうか?
ans<-glm(y~x1+x2...xn,family=binomial(link="logit"),data=df)
この例でいうとどのようにすればよいのでしょうか?
初心者 (2008-08-19 (火) 11:04:26)
おそれいります。
あるベクトル
x <- c(rep(1,19),rep(0,6))
から、すべての要素を並べ替えたリストを作成したいのです。
どうすればよろしいでしょうか。
よろしくおねがいいたします。
a <- c("a","b","c") apply(combinations(length(a),2),1,function(x,y) y[x], a)ということですか? -- akira 2008-08-19 (火) 11:46:10
one (2008-08-14 (木) 22:34:42)
お世話になります。
print()でYesかNoの入力をユーザーに促し、switch()で処理を分岐させたいと考えていますが、キーボードから入力する関数が見つかりません。
C言語ならscanf()で標準入力ができますが、Rでそれに相当するような関数はないでしょうか?ご教授よろしくお願いします。
環境はWindows R 2.7.1です。
sh (2008-08-14 (木) 03:17:04)
観測データ全体のうち、興味ある値以下のものの「比率」を求めるには、例えば、set.seed(1) x <- sort(rnorm(200)) ecdf.x <- ecdf(x) ecdf.x(0.23)としますが、より正確な「確率値(P-value)」を求めるにはどうすればよろしいでしょうか?
References: (1) 階段関数、経験分布関数 - RjpWiki, (2) 正規性の検定(経験分布関数の作図), (3) 経験分布関数 - ryamadaの遺伝学・遺伝統計学メモ
set.seed(1) x <- rnorm(130) y <- rnorm(80) (p.val <- 1 - ecdf(y)(x))Reference: R help archive: Re: [R] Rank-based p-value on large dataset より一部改訂 I have 80 values (call them y) that I am using as an empirical distribution and I want to find the p-value of 130 points (call them x) from the empirical distribution. -- sh 2008-08-15 (金) 00:28:13
> pnorm(0.23) [1] 0.5909541ですが,標本の大きさを200,2000,20000,200000,2000000,20000000 としてやってみると,
> sapply(200*10^(0:5), function(n) {set.seed(1); x <- sort(rnorm(n)); mean(density(x)$x<0.23)}) # programmed by 一言居士 [1] 0.5214844 0.4941406 0.5527344 0.5371094 0.5234375 0.5175781ということになり,母比率とはずいぶん異なるようです。
> sapply(1:20, function(n) {x <- sort(rnorm(200)); mean(density(x)$x<0.23)}) [1] 0.4941406 0.5449219 0.5664062 0.5000000 0.5468750 0.6015625 0.5468750 [8] 0.5761719 0.5156250 0.5136719 0.5273438 0.5175781 0.5117188 0.5292969 [15] 0.5566406 0.5507812 0.5625000 0.5234375 0.5488281 0.5820312いつも,あんまり良い推定値ではないですね。 -- 一言居士 2008-08-18 (月) 09:40:16
> pnorm(0.23) [1] 0.5909541 > summary(sapply(1:100, function(n) {x <- sort(rnorm(200)); mean(density(x)$x<0.23)})) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.4395 0.5059 0.5215 0.5283 0.5439 0.6465 > summary(sapply(1:100, function(n) {x <- sort(rnorm(200)); mean(x<0.23)})) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.5050 0.5750 0.5950 0.5964 0.6162 0.6800
Saito (2008-08-12 (火) 17:02:22)
似たような質問がないか探しましたが、見当たらなかったので質問させてください。回帰分析の結果で、特定の変数の係数値を取り出すときには手動でやる以外に方法はないのでしょうか?例えば以下のような場合です。set.seed(1) a=rnorm(10,0,1) b=rnorm(10,2,3) c=lm(b~a) coef(c)#aの係数だけを取り出したいとする。 coef(c)[2]#手動でaの係数の番号を指定して抽出この場合ですと[2]という指定を手動で行っています。しかしこの方法ですと係数が多くなってきたときや、独立変数を変えたときなどに指定の番号を間違う恐れがあります。$や@などを使って色々試したのですが上手い方法を見つけられませんでした。どなたか方法をご存知でしたらご教授していただけないでしょうか。なお、OSはWindowsXpでバージョンはR.2.7.0です。
myuhe (2008-08-04 (月) 19:32:30)
ubuntuでrjpwiki内の次のページ(http://www.okada.jp.org/RWiki/?R%20%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB#pbac840c)を参考にr-baseとr-base-devをインストールしました。
インストール後、Rの起動はできたのですが、plot()などでグラフィックを描画しようとすると、次のようなエラーメッセージが出てグラフが出力されません。
"以下にエラー plot.new() : 存在しないデバイスにプロットしようとしました"
linuxに関しては、最近使い始めたばかりで、もしかするとOSに依存した問題なのかもしれませんが、どうしても解決しないため、質問させていただきました。
解決法について、ご存知の方いらしたら、ご教示ください。
なお、環境は以下のとおりです。
os:ubuntu8.04 ※winXPとのデュアルブート
Rver2.7.1
(追記)sessioninfo()の出力結果を載せておりませんでしたので、載せておきます。attached base packages:~ [1] stats graphics grDevices utils datasets methods base~
- すみません。自己解決しました。plot.new()で呼び出しておけば良かったのですね。これまでWinユーザだったため、勝手がわかっておりませんでした。 -- myuhe 2008-08-04 (月) 20:16:57
- 私は似たような環境(os:ubuntu7.10 ※winXPSP2とのデュアルブート)で、問題なく行きますが…
> sessionInfo() R version 2.6.1 (2007-11-26) i486-pc-linux-gnu locale: LC_CTYPE=ja_JP.UTF-8; LC_NUMERIC=C; LC_TIME=ja_JP.UTF-8; LC_COLLATE=ja_JP.UTF-8; LC_MONETARY=ja_JP.UTF-8; LC_MESSAGES=ja_JP.UTF-8; LC_PAPER=ja_JP.UTF-8; LC_NAME=C;LC_ADDRESS=C; LC_TELEPHONE=C; LC_MEASUREMENT=ja_JP.UTF-8; LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] rcompgen_0.1-17家のPCが8.04&R2.7.1だった(でもdual bootでない)と思いますので、確認してみます。 -- akira 2008-08-04 (月) 20:48:51- 私の環境では問題ないです。
> sessionInfo() R version 2.7.1 (2008-06-23) i486-pc-linux-gnu locale: LC_CTYPE=ja_JP.UTF-8; LC_NUMERIC=C; LC_TIME=ja_JP.UTF-8; LC_COLLATE=ja_JP.UTF-8; LC_MONETARY=C; LC_MESSAGES=ja_JP.UTF-8; LC_PAPER=ja_JP.UTF-8; LC_NAME=C; LC_ADDRESS=C; LC_TELEPHONE=C; LC_MEASUREMENT=ja_JP.UTF-8; LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods baseubuntu8.10です。 -- akira 2008-08-05 (火) 00:35:59- 有用な情報ありがとうございます。う〜ん、なぜすんなりいかないでんしょうか・・・気になるので、再度試してみます。 -- myuhe 2008-08-05 (火) 09:41:40
- 他のデバイス(pdfとか、bmpとか)もダメですか?もしかして、Rの再インストールで解決したりしませんか? -- akira 2008-08-06 (水) 00:00:24
okinawa (2008-08-01 (金) 13:28:17)
いつもお世話になってます。okianwaです。
windowsXPSP2、R2.5.1でRCMD BATCH infile.r outfile.txtを実行した場合、SJISでoutfile.txtが吐き出されます。これを、UTF-8でoutfile.txtを吐き出そうと思い、--encoding="utf-8" の指定をしたのですが、SJISのままでした。
なにか良い方法はありませんでしょうか?よろしくお願いいたします。
99 (2008-08-01 (金) 06:45:49)
グラフ作成時にグラフの背景色を好きな色に塗りつぶすにはどうしたらいいのでしょうか?枠や値のプロットは好きな色に設定できるのですが、背景色も設定できるのでしょうか?
basel (2008-07-31 (木) 12:53:10)
csvファイルをread.tableで読み込んだあと、fixで内容を確認するとデータの全てが1列目にデータ読みこまれてしまいます。
どのようにしたら良いのでしょうか?
> read.csv function (file, header = TRUE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", ...) read.table(file = file, header = header, sep = sep, quote = quote, dec = dec, fill = fill, comment.char = comment.char, ...) <environment: namespace:utils>
basel (2008-07-29 (火) 12:54:02)
a <- file("ファイル名", open="r" encoding="cp932")
を実行すると、
「以下にエラーfile("c/:ファイル名", open="r" encoding="cp932"):
コネクションを開くことができません
追加情報:Warning message:
ファイル"c/:ファイル名"を開くことができません。理由は'Invalid argument"です in:file("c/:ファイル名", open="r" encoding="cp932")
というエラーが出てしまいます。
単純に
a <- read.table("c/:ファイル名")
ですと、
「以下にエラーfile(file, "r"):コネクションを開くことができません
追加情報:Warning message:
ファイル"c/:ファイル名"を開くことができません。理由は'Invalid argument"です in:file(file, "r" )
というエラーが出てします。
単純な質問ですが、よろしくご教授願いいたします。
せーだ (2008-07-24 (木) 13:59:09)
WinXP Pro で R-2.7.1 を使っており、
以前から C:/Program Files/R/R-2.x.x/etc の中で
Rconsole の Font セクション(19行目付近)を
font = TT MS Gothic
に、Rdevga の TT Arial の部分を全て TT MS Gothic に修正しています。
この状態で『〜』(から)や『−』(全角マイナス)など一部の全角記号を
含むグラフを作成し、クリップボードにメタファイルでコピーしたものを
パワーポイントに貼ると、その記号だけ『?』に化けます。
例えば以下のようなコードです。
plot(sin, main="ほげ〜−ふが")
このような現象は R-2.6.2 までは発生しませんでした。
なお、メタファイルを別ファイルとして保存したものはパワーポイントに
問題なく取り込めます。
解決策をご存知の方がいらっしゃれば、どうか御教示下さい。宜しくお願いします。
- パワーポイントで、編集 - 形式を選択して貼り付け - 拡張メタファイル でどうですか? -- 2008-07-24 (木) 15:18:56
- あ、できた…。2.7系に上げたら問題が発生したという部分は気になりますが、当面この方法で対処します。ありがとうございました。 -- せーだ 2008-07-24 (木) 15:27:22
- Unicode化の過程で現在部分的な拡張を行っているので当分の間、不具合は多いと思います. 非常に地味な作業になるので,まとまった時間がとれれば良いのですがなかなかそうもいきません..., -- なかま 2008-07-24 (木) 16:17:42
- 2.9.0では解決されているようです。CHANGES IN R VERSION 2.9.0のWindows-specific changes to Rによると次の記述があります。-- せーだ 2009-04-20 (月) 11:28:21
o iconv() is now done by a version of Yukihiro Nakadaira's win_iconv rather than by libiconv. This version is based on Windows' codepages and is not quite as comprehensive as libiconv: it is however much smaller and easier to maintain. The implementation here is 100% compatible: you can drop in libiconv's iconv.dll as a replacement if you need it, from http://www.stats.ox.ac.uk/pub/Rtools/Riconv.dll.
吉原 (2008-07-24 (木) 02:17:25)
Windows XP で R version 2.7.0 を使っています。
図の中に text() を使って注釈を書き、右端でそろえようとしたのですが、若干ずれが生じます。
いろいろ試したところ、次のようなことがわかりました。
pdf() を使うと問題が生じる。
大文字の Y を使うと問題が生じる。(他にもあるかもしれません)
例えば You という単語が入ると症状が顕著です。
pdf('You.pdf', width=11, height=8.5) plot(0,0,xlim=c(0,1),ylim=c(0,1),type='n') abline(v=.5) text(0.5,0.9, 'You', pos=2) text(0.5,0.8, 'You You', pos=2) text(0.5,0.7, 'You You You', pos=2) text(0.5,0.6, 'You You You You', pos=2) text(0.5,0.5, 'You You You You You', pos=2) text(0.5,0.4, 'You You You You You You', pos=2) text(0.5,0.3, 'You You You You You You You You', pos=2) dev.off()
postscript() では同様の問題は見られませんでしたので、.ps ファイルを .pdf に変換するなどの解決法はありますが、根本的に何が問題なのかが気になります。
よろしくお願いします。
pdfFonts(AdobeSansMM=Type1Font("AdobeSansMM",rep("/tmp/ZX______.afm",4))) pdf("hoge.pdf", family="AdobeSansMM")等とすれば, 等幅では無い物で, 何処に持っていっても問題の無いPDFにはなると思います.
匿名 (2008-07-23 (水) 13:20:31)
五章P106の一行目に表示されているコマンド
jp.ar<-ar(djpMacro, method="ols")
これを打ち込んだところ、以下のエラーが発生しました。
以下にエラー if ((dimension < 1) | (dimension > n)) stop("wrong embedding dimension") : 引数の長さが0です 追加情報: Warning messages:1: In log(det(varEm - order.min + 1)) : 計算結果が NaN になりました
2: In ar.ols(x, aic = aic, order.max = order.max, na.action = na.action, :モデルの次数: 18 特異値が射影行列の計算中に生じました。 結果はモデル次数までしか適正ではありません: 17誤植でしょうか?
http://d.hatena.ne.jp/haruosuz/
ここでは、誤植と紹介されているのですが…
karat (2008-07-18 (金) 01:03:54)
関数に因数としてオブジェクト(例えばデータフレーム)を渡し、
そのオブジェクトの名前を得たいとき、どのような関数を使えばいいのでしょうか?
例えばfoobarがデータフレームだとして、nantarakansu(foobar)と渡し、
nantarakansuの中で"foobar"が欲しいのですが。超初心者質問で恐縮です。
山田 (2008-07-16 (水) 16:55:08)
相互相関関数のそれぞれのラグにおけるACFの値を知るにはどうすればよいですか?
Neo (2008-07-12 (土) 01:41:10)
こんにちは。
A B
1 2
4 5
というa.txtというファイルとA B C qw 2 3 we 5 6 se 8 9というb.txtというファイルがあるとします。
c <- as.list(NULL) c[[1]] <- a c[[2]] <- bとしてリストcを
A B A B C 1 2 qw 2 3 4 5 we 5 6 se 8 9このように横方向にファイルに保存したいのですが、どのようにすればよいでしょうか?write()やlapply()をうまく使えばできそうだなとは思うのですが、なかなか良い方法が思いつきません。
どうかよろしくお願いします。
write.table(cbind(rbind(x,NA),y),file="hoge",row.names=FALSE)#足りない分はNAで継ぎ足すnrowがリスとの要素ごとに違うなら、nrowの最大値を予め調べておいて、
nr <- max(sapply(c,nrow)) x <- matrix() for(i in seq(c)){ if(nrow(c[[i]])<nr) c[[i]][seq(nrow(c[[i]])+1,nr),] <- NA x <- cbind(x,c[[i]]) } write.table(x[,-1], file="hoge",row.names=FALSE)とか。上手い方法は他にあると思いますが。 -- akira 2008-07-12 (土) 09:25:34
ara (2008-07-08 (火) 15:46:53)
Mac版RをMac OS X 10.4.11(PowerBook G4)で使用しています。
R.app GUIで、これまでコマンドラインでの行頭・行末への移動はコマンド(アップル)キー+左右カーソルで行っていましたが、R2.7.0以降(2.7.1も)では一旦Quartzデバイスを開くとこのコンビネーションが効かなくなってしまいます。言語設定を英語に切り替えても同様の症状が出てしまいます。ctrlキー+左右カーソルやctrl+A or Eでもジャンプできるのですが、慣れてしまっているもので・・
どなたか対処方法をご存じないでしょうか?
kokko (2008-07-06 (日) 22:15:54)
行名と列名の変更・削除方法について教えてください。
以下のようなデータフレームが変数aに格納されているとします。
A B C a 1 2 3 b 4 5 6 c 7 8 9
ここでa,b,cは行名、A,B,Cは列名です。
これらの行・列名を変更するにはどうすればよいのでしょうか?
たとえばD E F d 1 2 3 e 4 5 6 f 7 8 9
のようにしたいです。また、特定の行・列名だけを削除して
A B a 1 2 3 4 5 6 c 7 8 9
のようなデータフレームを作成することはできるでしょうか?
よろしくお願いします。
使用環境 Mac OS X 10.5.4、R 2.7.0
> x <- matrix(1:20,ncol=4,dimnames=list(1:5,1:4)) > x 1 2 3 4 1 1 6 11 16 2 2 7 12 17 3 3 8 13 18 4 4 9 14 19 5 5 10 15 20 > colnames(x)[2] [1] "2" > colnames(x[,2]) NULL > x[,2] 1 2 3 4 5 6 7 8 9 10 > names(x[,2]) [1] "1" "2" "3" "4" "5"つまり、colnames()でなく、names()で出てきます。 -- akira 2008-07-08 (火) 22:35:58
森林 (2008-07-04 (金) 18:40:26)
非線形最小自乗当てはめの制御 nls.control()について質問です。
nls() 関数による非線形最小自乗法アルゴリズムの幾つかの特性をユーザが設定できるようですが、うまくいきません。
次のようにRコンソールで打ち込むと、nls.control(maxiter=500)
$maxiter
[1] 500
$tol
[1] 1e-05
・・・・
と表示されるのに、nls( 式、data, star=・・・)を実行したとき、50回でとまります。
すなわち、maxiter=50のままです。いろいろ試したのですが、具体的な変更方法がわかりません。
どなたか、ご教示のほどお願いします。
nls(なんだら, control=nlscontrol(かんだら))つまり,control 引数が要求するリストを nls.control が返すので,それを引数に設定すると言うことです。 -- 一言居士 2008-07-04 (金) 18:51:38
masaki (2008-07-03 (木) 17:38:59)
WindowsXPでR2.6.2を使用している者です。
JavaのpsrseIntメソッドのように、文字列を数値に変換する方法はありませんでしょうか?
具体的には、ある文字列(例:abc105)から正規表現を用いて、
x <- gsub(":lower:+(:digit:+)", "\\1", "abc105")
数値だけの文字列に置き換えます。このxを表示すると、
[1] "105"
となります。これを、ループで
for(i in 1:x){ 処理 }
のように用いたいのですが、文字列のため用いることができません。
正規表現の段階で数値型にする、xを文字列型から数値型に変換する、あるいは他の方法でもかまいませんのでお願いいたします。
田中 (2008-07-03 (木) 13:49:33)
n1<-c(1,2,3) n2<-c(4,5,6) n3<-c(7,8,9) →n<-c(1,2,3,4,5,6,7,8,9)のように複数のベクトルを1つのベクトルに合体させる方法を教えてください。
初心者 (2008-07-03 (木) 09:56:49)
Windows 版 R 2.7.1 を使用しているものです。以下の諸設定をして、日本語(2バイト文字)
が含まれた PDF ファイルを生成しようとしているのですが、上手く表示されません。
<C:\Program Files\R\R-2.7.1\etc> Rdevga:12〜15行目を以下のように修正しました TT MS Gothic : plain TT MS Gothic : bold TT MS Gothic : italic TT MS Gothic : bold&italic Rconsole:19行目を以下のように修正しました font = TT MS Gothic Rprofile.site:以下を追記しました setHook(packageEvent("grDevices", "onLoad"), function(...) grDevices::ps.options(family="Japan1"))
もしよろしければご教授いただけませんでしょうか。
<C:\Program Files\R\R-2.7.1\etc> Rdevga:12〜15行目を以下のように修正しました TT MS Gothic : plain TT MS Gothic : bold TT MS Gothic : italic TT MS Gothic : bold&italic Rconsole:19行目を以下のように修正しました font = TT MS Gothic Rprofile.site:以下を追記しました(←ここを修正) setHook(packageEvent("grDevices", "onLoad"), function(...) { grDevices::ps.options(family="Japan1GothicBBB"); grDevices::pdf.options(family="Japan1GothicBBB") })
sh (2008-07-03 (木) 09:10:15)
barplot(2:10, ylim=c(1,10))棒グラフのy軸の下限を1にしたのですが、棒は下限が1にならずに図の外にはみ出してしまいます。アドバイスをよろしくお願いします。
barplot(c(.89,.91,.92,.95), ylim=c(.88,.95),xpd=F,yaxt='n') axis(2,at=seq(.88,.95,.01),label=NA)
田中 (2008-06-27 (金) 17:17:20)
x<-c(1,2,3)とy<-c(6,7,8)の要素の数字を総当たりで結合してz<-(16,17,18,26,27,28,36,37,38)のベクトルを作成したいのですが?
ichigo (2008-06-25 (水) 12:26:50)
Rのパッケージ「sspir」を使って状態空間モデルを扱いたいのですが
(株価などで)
どうも使い方がいまひとつわかりません.
このサイト内を検索したところ恐ろしいらしいページに一件記事がありましたが
特に話題が広がるわけでもなく、終わっていました.
詳しく書いてあるサイトなどご存知でしたら、教えていただけませんでしょうか.
よろしくお願いいたします.
kei (2008-06-24 (火) 05:52:51)
パッケージe1071内の関数svmについて教えて下さい。
関数svmを使って分類問題の学習をさせるために
以下のようなプログラムを組んだのですがlibrary(e1071) dat <- iris dat.col <- ncol(dat) dat[,5] <- as.integer(dat[,5]) dat.tr <- dat[c(1:40,51:90,101:140),] dat.tr.row <- nrow(dat.tr) dat.tr.u <- dat.tr for (j in 1:dat.tr.row){ if (dat.tr.u[j,5] == 1){ dat.tr.u[j,5] <- "A" } else { dat.tr.u[j,5] <- "B" } } x <- (dat.tr.u[,1:dat.col-1]) y <- dat.tr.u[,5] model <- svm(x,y)
実行すると svm.default(x, y) : Need numeric dependent variable for regression.
というエラーが出ます。x,yのmodeが問題ではと思い、色々な組み合わせを試したみたのですが同じエラーが出ます。解決方法を教えて下さい。
よろしくお願いします。
A (2008-06-20 (金) 17:08:13)
Tukeyの多重検定をしたいのですができません。
青木先生のサイト(http://aoki2.si.gunma-u.ac.jp/R/m_multi_comp.html)等を参考にして、m.multi.comp(・・・
tukey(data, group)
などやってみましたが、 「エラー:関数 "m.multi.comp" を見つけることができませんでした 」「エラー:関数 "tukey" を見つけることができませんでした」というメッセージが出てしまいます。
どうしたらよいのでしょうか?
使用環境はWindowsXPでR version 2.7.0を使ってます。
よろしくお願いします。
apple (2008-06-15 (日) 18:05:00)
よろしくお願いします。
V1 V2 V3 1 1 2 3 2 4 5 6 3 7 8 9
このようなデータフレームを変数aに入れたとします。
1列目のmedianを計算しようと思い median(a[1])としたところ
以下にエラー median.default(a[1]) : 数値データが必要です
と言われました。
しかしmean(a[1])とすると1列目の平均値を計算できます。
これはどうしてでしょうか?mean()とmedian()には書式に違いがあるのでしょうか?
使用環境 Mac OS X 10.5.3、R 2.7.0
> class(a[1]) [1] "data.frame" > class(a[,1]) [1] "integer"median.default の定義の最初の方には,
if (is.factor(x) || mode(x) != "numeric") stop("need numeric data")とあります。
if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) { warning("argument is not numeric or logical: returning NA") return(NA_real_) }くらいしかありません。
> mean.data.frame function (x, ...) sapply(x, mean, ...)をよんでいるので,この mean.data.frame の定義に習って,median.data.frame を定義してやると,
> median.data.frame <- function(x, ...) sapply(x, median, ...) > median.data.frame function(x, ...) sapply(x, median, ...)定義後は,
> median(a[1]) V1 4というように,ちゃんと計算してくれるようになります(最初からそういうふうにしといてよってか?)
> median(a[,1]) [1] 4となりますよね。出力形式が異なりますね。分かりましたか?圃下圃下君。
-0.889 (2008-06-12 (木) 00:39:03)
たとえば、xデータに電圧値(v)をプロット、yデータに電流値(i)をプロットしてグラフにしたとします。グラフにあるデータで第2軸をたどれば抵抗値(r)が分かると言った具合にしてみたいのですが、可能でしょうか。質問内容のように全くの初心者です。
ohm<-function(e,i){ r<-e/i return(r) } > ohm(2,2) [1] 1
寿司 (2008-06-11 (水) 09:39:40)
度々、恐れ入ります。
データフレームで、条件付の抽出を行いたいのですが、
複数の条件を設定した場合、うまく抽出できませんでした。
ひとつの条件であれば、問題なく機能するのですが、以下D3の記法は何がおかしいのでしょうか?
お手数をおかけしますが、よろしくお願いいたします。
id <- c("A","B","C","D","E") height <- c(158,177,177,177,166) weight <- c( 51, 56, 55, 57, 55) age <- c( 23, 44, 21, 39, 42) D <- data.frame(ID=id, H=height, W=weight, A=age)
D2 <- D[(D$ID=="A"), ] D3 <- D[((D$ID=="A") || (D$ID=="B")), ]
寿司 (2008-06-10 (火) 22:41:30)
たびたびの初歩的な質問で恐れ入ります。
以下のようなデータフレームを作成しましたところ、自動的に通し番号が振られますが、出力する際にこの通し番号を除く方法はありませんでしょうか?
出力しますと、通し番号のために、列名がずれてしまいます。
(使用環境 windows vista, R2.6.0)
sex <- c("F","F","M","M","M") height <- c(158,162,177,173,166) weight <- c(51,55,72,57,64) ( x <- data.frame(SEX=sex, HEIGHT=height, WEIGHT=weight) )
write.table(x, "x.csv", quote=F, col.names=T, append=F, sep="," )
アべセ (2008-06-10 (火) 16:11:13)
被験者間計画の分散分析のやり方は分かりやすいのですが、被験者内計画の分散分析のやり方が全くわかりません。よろしければ、その方法を教えてください。
ton (2008-06-09 (月) 23:29:02)
Mac OS X 10.4.11でパッケージとデータ>パッケージインストーラーから
R Commander(Rcmdr)をインストールし、Rコンソールで「>library(sem)」と
入力してパッケージを読み込もうと思ったのですが、以下のようなエラーがでます。
全くの素人で、解決の手段がわかりません。よろしくお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー要求されたパッケージ tcltk をロード中ですTcl/Tkインターフェースのロード Error in dyn.load(file, DLLpath = DLLpath, ...) :
共有ライブラリ '/Library/Frameworks/R.framework/Versions/2.7/Resources/library/tcltk/libs/i386/tcltk.so' を読み込めません dlopen(/Library/Frameworks/R.framework/Versions/2.7/Resources/library/tcltk/libs/i386/tcltk.so, 10): Library not loaded: /usr/X11R6/lib/libX11.6.dylib Referenced from: /Library/Frameworks/R.framework/Versions/2.7/Resources/library/tcltk/libs/i386/tcltk.so Reason: image not foundError : .onLoad は 'tcltk' のための 'loadNamespace' で失敗しました
エラー: パッケージ 'tcltk' をロードできませんでした
tarai (2008-06-07 (土) 11:39:59)
Rで多変量自己回帰分析する際のパワー寄与率を計算するにはどうしたらよいでしょうか?どなたかお教え願えれば幸いです。
初心者 (2008-06-06 (金) 14:01:42)
簡単な質問申し訳ないのですが、
n*3の行列データで等高線を書きたいと思っています。
データは
x1 y1 z1
x1 y2 z2
x1 y3 z3
x2 y1 z4
x2 y2 z5
x3 y3 z6
........
という形式で並んでいるのですが、
これを
d<-read.table("data")で読み込んで、
contour(data$V1,data$V2,data$V3)でプロットしようとしても
'x'と'y'の値は昇順であることが期待されます
と出てプロットできません。persp()を用いても同様に表示されます。
ご回答お願いします。
使用環境は
Ver.2.7.0
win vistaです
duplicate character string indicating how to handle duplicate data points. Possible values are "error" produces an error message, "strip" remove duplicate z values, "mean","median","user" calculate mean , median or user defined function (dupfun) of duplicate z values.と出てきますよ. -- akira 2008-06-07 (土) 05:31:29
寿司 (2008-06-05 (木) 00:18:35)
昇順、降順を織り交ぜたソートを行いたいのですが、思ったように機能してくれません。以下の例では、例えば、Hについては昇順、Wについては降順、Aについては昇順としたいのですが、コマンドはどのように書けばよいでしょうか?すべて昇順であれば、orderで順に並べればよいのですが…。初歩的な質問で申し訳ありませんが、よろしくお願いいたします。
> id <- c("A","B","C","D","E") > height <- c(158,177,177,177,177) > weight <- c( 51, 56, 56, 57, 55) > age <- c( 23, 43, 44, 39, 42) > D <- data.frame(ID=id, H=height, W=weight, A=age) > D ID H W A 1 A 158 51 23 2 B 177 56 43 3 C 177 56 44 4 D 177 57 39 5 E 177 55 42
> D ID H W A 1 A 158 51 23 2 B 177 56 43 3 C 177 56 44 4 D 177 57 39 5 E 177 55 42 > (o <- order(D$H,-D$W,D$A)) [1] 1 4 2 3 5 > D[o,] ID H W A 1 A 158 51 23 4 D 177 57 39 2 B 177 56 43 3 C 177 56 44 5 E 177 55 42
LINUX初心者 (2008-06-03 (火) 20:33:38)
コマンドライン(FEDORA7)で作業していて操作を間違えてしまった時に
一個前の状態に戻れるような機能はないのでしょうか?
RSiteSearchやサイト内検索は試みましたが見つけられませんでした。
現在金先生の本を教科書に勉強始めたとこなので
「そんなことも分からんのか!!」と言われそうですが宜しくお願いします。
R は version 2.7.0 (2008-04-22)
x <- 4 x <- x+4 x <- x*5+8なんていうような場合に,何段階か元の状態に戻るには,↑で何段階も前に戻って,その次には「何段階-1」に戻ってというような面倒なことが必要なためです(いわずもがな)
x <- 4 x1 <- x1+4 x2 <- x2*5+8とすれば古いオブジェクトは残りますよね。慣れるまではエディター、save(list=ls(),file="tmp.Rdata")と「オブジェクトの大量発生」でやり過ごしてはいかが? -- akira 2008-06-04 (水) 07:58:18
寿司 (2008-06-03 (火) 12:17:18)
以前SASを使っておりまして、Rでも同じようにデータハンドリングしようとすると、意外に手間取っております。一通り、探してみたのですが、適当なものは見つからず、以下の点につきまして、関数やパッケージをご存知でしたら、紹介頂けませんでしょうか?
・ソートについて
複数の項目のソートを行いたいのですが、昇順、降順が混ざっており、単純には並び替えできませんでした。
現在の私のプログラムでは、ファイルを適宜分割した後、何度かソートをかけて、またくっつけるという、非常に面倒で遅い処理をしております。
・分位について
SASであれば、rankを使って簡単に分位に分けられたのですが、Rには相当する関数がありますでしょうか?
・行ずらし
ある項目について、前レコードとの比較を行いたいのですが、現在の私のプログラム:(列を追加&前レコード値を代入)の反復、では遅すぎてデータ処理が滞っています。
・重複列削除
まったく同じ行が現れたとき、その行を削除したいのですが、項目を逐一照会して、判断するほか無いのでしょうか?
sh (2008-05-30 (金) 03:51:32)
以下のようなタブ区切りのデータファイル("file.txt")を関数read.delim()で読みこむときに、列名の一部(" ","-","|",":")が"."に強制返還されないようにする方法を教えてください。
a b a-b a|b a:b a_b a b a-b a|b a:b a_b a b a-b a|b a:b a_b
> sessionInfo() R version 2.6.1 (2007-11-26) i386-apple-darwin8.10.1 > ( x <- read.delim("file.txt") ) a.b a.b.1 a.b.2 a.b.3 a_b 1 a b a-b a|b a:b a_b 2 a b a-b a|b a:b a_b Warning message: In read.table(file = file, header = header, sep = sep, quote = quote, : 'file.txt' の readTableHeader で不完全な最終行が見つかりました > colnames(x) [1] "a.b" "a.b.1" "a.b.2" "a.b.3" "a_b"
nrow? (2008-05-29 (木) 13:38:34)
いつも、拝見させていただいております。
計算する際に、オブジェクトがa〜zまでできます。
この全オブジェクトの列数が、書き込まれたデータフレームを作成したいのですが、うまくいきません。
例えば
a1 <- data.frame(ls(), nrow(get(ls())))
とすると一列目には全オブジェクトの名前が入るのですが
二列目には一番初めに来るオブジェクトの列数が入ってしまいます。
二列目には一列目のオブジェクトに対応した列数を入れるためにはどうしたらよいでしょうか。
ご教授願います。
> abc <- matrix(0,2,2) > abc.def <- matrix(0,3,2) > Obj <- c("abc","abc.def") > ( x <- sapply(Obj, function(i) nrow(get(i))) ) abc abc.def 2 3 > names(x) <- NULL > x [1] 2 3 > data.frame(Obj, x) Obj x 1 abc 2 2 abc.def 3
寿司 (2008-05-28 (水) 09:27:13)
R 2.6.0 をWindows Vistaで使用しています。
日付データを含んだcsvファイルを読み込み、Rで今日の日付で検索しようと考えております。
Rでは、today <- Sys.Date()
today
[1] "2008-05-28"
となりますので、csvファイルには文字列で"YYYY-MM-DD"となる列を作ったのですが、これでは型が対応していないのか、エラーとなってしまいました。
R側、csv側どちらでも良いので、検索が機能するような方法ありませんでしょうか?
プログラムは以下のとおりです。(csvの代わりにデータフレームに直接入力しています)
d <- c("2008-05-28","2008-05-29","2008-05-30")
a <- c(1,2,3)
( x <- data.frame(D=d, A=a) )
D A1 2008-05-28 1
2 2008-05-29 2
3 2008-05-30 3(today <- Sys.Date())
[1] "2008-05-28"x[x$s==today, ]
[1] D A
0 rows> (or 0-length row.names)
x[x$D==today, ]
[1] D A
0 rows> (or 0-length row.names)
Warning message:
In `[.data.frame`(x, x$D == today, ) :
メソッド ("Ops.factor", "Ops.Date") は "==" に対しては矛盾しています
ICA (2008-05-26 (月) 23:57:06)
複数のboxplotを縦に並べようとしています。グラフAは縦軸の最大値―最小値が0-20で、グラフBは0-100です。二つのグラフを描く際に、Aのグラフの縦軸の目盛り間隔がBのグラフの縦軸の目盛り間隔と一致するようにしたいのです。つまり、Aの0-20の長さは、Bの0-20の長さと同一にしたいです。
縦軸の最大値の指定は、ylimで出来ることがわかりましたが、間隔をそろえるのは、x,y軸をそろえるというaspという記述しか見つけられませんでした。
おそらく、boxplotに限らず、どのようなグラフでも同じやり方があると思うのですが、その方法を教えていただきたいと思います。
> x <- rpois(100, 80) > max(x) [1] 99 > boxplot(x, yaxp=c(0,100,1), ylim=c(0,100)) > x <- rpois(100, 30) > boxplot(x, yaxp=c(0,100,1), ylim=c(0,100))
> par(pin=c(3,1)) > boxplot(Petal.Width~Species, iris, ylim=c(0,4)) > par(pin=c(3,2)) > boxplot(Sepal.Length~Species, iris, ylim=c(0,8))
par(mfrow=c(1,2)) boxplot(Petal.Width~Species, iris, ylim=c(0,4), yaxs='i') boxplot(Sepal.Width~Species, iris, ylim=c(0,8), yaxs='i')こういうこと? -- 2008-05-28 (水) 20:57:08
boxplot(c(Petal.Width, Sepal.Width, Petal.Length, Sepal.Length)~ rep(1:12, each=50), iris, xaxt="n", col=rep(2:5, each=3)) axis(1, 1:12,abbreviate(rep(levels(iris$Species), 4))) legend("topleft", legend=c("Petal.Width", "Sepal.Width", "Petal.Length", "Sepal.Length"), fill=2:5, yjust=1, bty="n")
松田紀之 (2008-05-21 (水) 19:36:41)
R2.7.0 on MacBookPro (OSX 10.5.2) でplot()し,legend()を実行するとエラーがでます.下記のプログラムは,R2.7.0 on PowerBookG4 (OSX 10.4.11)なら問題はありません.対処方法を教えて下さい.plot(1:5,1:5)
legend("bottomright",legend=c("a","b"),lwd=1,col=1:2)
*** caught bus error ***address 0x10, cause 'non-existent physical address'
Traceback:1: strwidth(legend, units = "user", cex = cex) 2: legend("bottomright", legend = c("a", "b"), lwd = 1, col = 1:2)
日本人は苦しみます. # .Rprofile setHook(packageEvent("grDevices", "onLoad"), function(...){ grDevices::quartzFonts(sans=grDevices::quartzFont( c("Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6", "Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6"))) grDevices::quartz.options(family="sans") ) しかし, grDevices::quartz.options(family="sans") は有効になりません. そこでさらに以下を加えます. attach(NULL, name = "MacJapanEnv") assign("familyset_hook", function() { if(names(dev.cur())=="quartz") par(family="sans")}, pos="MacJapanEnv") setHook("plot.new", get("familyset_hook", pos="MacJapanEnv")) ところが... > plot(1:5,1:5) > legend("bottomright",legend=c("a","b"),lwd=1,col=1:2) Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_PROTECTION_FAILURE at address: 0x00000014 0x900031c8 in strlen () (gdb) bt #0 0x900031c8 in strlen () #1 0x907bf19c in CFStringCreateWithCString () #2 0x0221bc58 in RQuartz_FindFont (fontface=-2147483648, fontfamily=0xbfffc3c0 "sans") at devQuartz.c:533 #3 0x0221bd0c in RQuartz_Font (gc=0xbfffc378, dd=0x17) at devQuartz.c:548 #4 0x0221c184 in RQuartz_Set (ctx=0x2155eb0, gc=0xbfffc378, flags=8) at devQuartz.c:623 #5 0x0221cc3c in RQuartz_StrWidth (text=0x1ff7e20 "a", gc=0xbfffc378, dd=0x212cd60) at devQuartz.c:736 gc->fontfaceは設定されてません. 以下は場当たり的に対処したものですが, 動作はしました. # 超対処療法的温泉旅館渡り廊下造営パッチ --- R-patched.orig/src/library/grDevices/src/devQuartz.c 2008-05-01 00:45:39.000000000 +0900 +++ R-patched/src/library/grDevices/src/devQuartz.c 2008-05-22 13:16:46.000000000 +0900 @@ -529,7 +529,7 @@ int i; for(i = 0; i < length(names); i++) if(0 == strcmp(fontfamily, CHAR(STRING_ELT(names, i)))) break; - if(i < length(names)) + if(i < length(names) && fontface > 0) fontName = CFStringCreateWithCString(kCFAllocatorDefault, CHAR(STRING_ELT(VECTOR_ELT(db, i), fontface - 1)), kCFStringEncodingUTF8);
ともぞう (2008-05-19 (月) 17:00:30)
A B a b c 2 2 2 2 1 2 2 2 2 0 1 2 2 1 1 2 2 0 2 0 0 2 2 1 2 0 2 2 2 0 0 2 0 2 1 2 1 1 1 2 2 0 2 2 0 0 1 1 0 2このようなデータから下のような集計を行う方法はありますでしょうか?
a a a b b b c c c 0 1 2 0 1 2 0 1 2 A 0 1 1 2 1 1 2 1 1 2 1 0 0 1 0 1 0 0 1 0 2 1 1 3 0 1 4 3 1 1 B 0 0 0 1 0 0 1 1 0 0 1 0 2 0 1 1 0 0 0 2 2 2 0 5 0 2 5 3 3 1集計は、Aが2のとき、b=2が4つという感じで行っています。
ちなみに、個別でAとaに関するテーブルというのはxtabsでできるのですが、実際のデータでは、列数が非常に多いので、全部まとめた集計表は作れないものかということで質問させていただきました。
何か良い知恵がございましたらよろしくお願いします。
> array(sapply(1:2, function(i) sapply(1:3, function(j) xtabs(~tmp[,i]+tmp[,2+j]))), dim=c(3, 9,2)) , , 1 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,] 1 1 2 1 1 2 1 1 2 [2,] 0 0 1 0 1 0 0 1 0 [3,] 1 1 3 0 1 4 3 1 1 , , 2 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,] 0 0 1 0 0 1 1 0 0 [2,] 0 2 0 1 1 0 0 0 2 [3,] 2 0 5 0 2 5 3 3 1
goof (2008-05-17 (土) 22:21:10)
Windows XPを使用しております。
sessionInfo()
R version 2.7.0 (2008-04-22)
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 base
です。
Rエディタで2byte文字を含むコードをR consoleに"カーソル行または選択中のRコードを実行"から送ると、R console上では文字化けが起こってしまい、正しく処理されません。R console上で直接入力する際は問題ないのですが・・・。全角の数字"#123"を試してみますと、
#ツPツQツR
となります。
options(encoding="UTF8")としてもoptions(encoding="SJIS")としても変化はありませんでした。Windows 2000、vistaでも試してみましたが、同じ問題が生じてました。R 2.6.2まではこの問題はありませんでした。
どうぞ原因と解決策のご教示をよろしくお願いいたします。
たにくん (2008-05-15 (木) 14:55:00)
解説にはSOM(自己組織化マップ)の教師つきバージョンと書いてあるので,使ってみたのですが,その使い方がはっきり分かりませんでした.
data(wines)
set.seed(7)
training <- sample(nrow(wines), 120)
Xtraining <- scale(wines[training,])
Xtest <- scale(wines[-training,],center = attr(Xtraining, "scaled:center"),scale = attr(Xtraining, "scaled:scale"))
xyf.wines <- xyf(Xtraining,classvec2classmat(wine.classes[training]),grid = somgrid(5, 5, "hexagonal"))
xyf.prediction <- predict(xyf.wines, newdata=Xtest)
table(wine.classes[-training], xyf.prediction$prediction)
というexampleがあるのですが,はっきりと理解できません.
もし,学習データとしてdata1という200行10列の行列を用い,テストデータとしてdata2という20行10列の行列を用いたい時,xyfではどのようなコマンドを入力すればsomのユニットの特徴を表示しない散布図のようなのを表示することができるのでしょうか?
ご回答よろしくお願いします.
xyf> xyf.prediction <- predict(xyf.wines, newdata=Xtest) 以下にエラー map(object, newdata, whatmap, weights) : 使われていない引数 (1)
小心者 (2008-05-15 (木) 14:25:03)
研究でRを使うことになり,特に統計データによる診断関係を行っています.
library(kohonen)を開いて,xyfを使うことにしました.
その例で本来winesというデータがパッケージには含まれているはずですが,それが入っていませんでした.
wines.classesもありませんでしたので,これらはどこかでソースをダウンロードしないといけないのですか?
その場合,どこでダウンロードできるのか教えてください.
file:///E:/Program%20Files/R/R-2.7.0beta/library/kohonen/html/wines.html
にはソースが以下のHPにあると書いてますが,見つかりませんでした.
http://kdd.ics.uci.edu/
どうかよろしくお願いします.
> library(kohonen) 要求されたパッケージ class をロード中です > data(wines) # これが,必要だよ > head(wines) alcohol malic acid ash ash alkalinity 右方省略 [1,] 13.20 1.78 2.14 11.2 [2,] 13.16 2.36 2.67 18.6 [3,] 14.37 1.95 2.50 16.8 [4,] 13.24 2.59 2.87 21.0 [5,] 14.20 1.76 2.45 15.2 [6,] 14.39 1.87 2.45 14.6 > head(wines.classes) 以下にエラー head(wines.classes) : オブジェクト "wines.classes" は存在しませんwines.classes というのは,library(help=kohonen) で出てくるリストにもないので,ないのでしょうね。 -- 2008-05-16 (金) 15:45:41
edora (2008-05-13 (火) 15:01:51)
Rと統計を学び始めています。
Rで組み合わせを行い、すべての組み合わせを表示させたい場合はどんなコマンドを
使えば良いのかわからずにいます。
x <- (1,2,3,4,5,6,7,8,9,10)
このxの中から2つの数字の組み合わせ45通りを表示させたいと思っています。
(1,2)(1,3)…(9,10)
またこれらの平均や分散を求めたり、度数分布表示が出来ればと思っています。
コマンドを調べる方法がよくわかっていないのですが、"Rと組み合わせ"と検索して
choose(10,2)のように組み合わせの10C2の計算方法がわかった段階で進めないでいます。
よろしくお願いします。
> x <- 1:10 > combn(x,2) # すべての組み合わせ列挙 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [1,] 1 1 1 1 1 1 1 1 1 2 2 2 2 2 [2,] 2 3 4 5 6 7 8 9 10 3 4 5 6 7 [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [1,] 2 2 2 3 3 3 3 3 3 3 4 4 [2,] 8 9 10 4 5 6 7 8 9 10 5 6 [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [1,] 4 4 4 4 5 5 5 5 5 6 6 6 [2,] 7 8 9 10 6 7 8 9 10 7 8 9 [,39] [,40] [,41] [,42] [,43] [,44] [,45] [1,] 6 7 7 7 8 8 9 [2,] 10 8 9 10 9 10 10 > combn(x,2,FUN=mean) #それらの平均 [1] 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 3.5 4.0 [20] 4.5 5.0 5.5 6.0 6.5 4.5 5.0 5.5 6.0 6.5 7.0 5.5 6.0 6.5 7.0 7.5 6.5 7.0 7.5 [39] 8.0 7.5 8.0 8.5 8.5 9.0 9.5
初心者 (2008-05-12 (月) 17:18:45)
クロス集計を作成する際に出るエラーで困っています。
非常に難しい点が、エラーが出る条件に再現性が見いだせないところなのですが、アドバイスいただけると嬉しいです。
A B C D E F G H
0 1 0 0 0 0 0 0
0 1 0 1 1 0 0 0
0 1 0 0 0 0 0 0
0 1 0 0 1 0 0 0
1 1 1 0 1 0 0 0
1 1 1 0 1 0 1 0
1 1 1 0 1 0 0 0
1 1 1 0 0 1 0 0
1 1 1 0 0 0 1 1
上記のようなデータをtmpとして、以下のスクリプトを実行しています。
for(i in c(1:3)){ tab_del <- read.table("tab_del.csv", sep = ",")#tab.csvをtab_del(白紙のcsv)に初期化 write.table(tab_del, "tab.csv", sep = ",", row.name = F, col.name = F) for(j in c(1:5)){ tab <-t(xtabs(tmp[,3+j]~tmp[,i], tmp)) write.table(tab, "tab.csv", sep = ",", row.name = F, col.name = F, append = T) } tab <- read.table("tab.csv", sep = ",") t_tab <- t(tab) write.table(t_tab, "t_tab.csv", sep = ",", row.name = F, col.name = T, append = T) }
上のデータではエラーが起きないのですが、実際のデータを扱った場合、「重複したrow.namesは許されません」というエラーが出ることがあります。
エラーの原因は、ループのiで起きていることまでは突き止めました。
具体的には、「特定のi列」(後述)を除くとエラーは発生せずにファイルが作成されるからです。
ただ、問題なのは、同じデータで同じスクリプトを実行しても、「特定のi列」が毎回異なります。
たとえば、一回目にi=1列目を除くことでエラーが出なくなったので、2回目にi=1行目を除いて同じスクリプトを実行すると、今度は異なるi列が原因でエラーが発生します。
スクリプトの問題なのか、データの問題なのかもはっきりせず困り果てています。どうぞよろしくお願いします。
以下にエラー read.table("tab_del.csv", sep = ",") : 入力中には利用可能な行がありません
sapply(1:3, function(i) matrix(sapply(1:5, function(j) xtabs(~tmp[,3+j]+tmp[,i])), 2))結果は以下のようになる
[[1]] [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 3 5 2 2 4 4 4 3 4 4 [2,] 1 0 2 3 0 1 0 2 0 1 [[2]] [,1] [,2] [,3] [,4] [,5] [1,] 8 4 8 7 8 [2,] 1 5 1 2 1 [[3]] [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 3 5 2 2 4 4 4 3 4 4 [2,] 1 0 2 3 0 1 0 2 0 1まあ,応答が途絶えたのでどうでも良いのかも知れないが。 -- 2008-05-13 (火) 23:13:34
X Jr. (2008-05-07 (水) 22:43:10)
Windows XP です。> sessionInfo() R version 2.7.0 (2008-04-22) 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 datasets utils methods baseで、
> plot(1, main = "テスト")として、[ファイル]→[別名で保存] から PDF で保存すると、main の部分に何も表示されません。
PDF に保存した直後に再度、同じ命令を入れると、> plot(1, main = "テスト") Warning messages: 1: 'PostScriptStringWidth' 中に不正な文字列 2: 'PDF_Text' 中に不正な文字列というメッセージが出ます。さらにもう一度同じ命令を入れるとメッセージは出ません。
.Rprofile にはsetHook(packageEvent("grDevices", "onLoad"), function(...) grDevices::ps.options(family="Japan1GothicBBB"))の記述をしています。これを外して同じようにすると、PDF の main の部分に点が9個並びます。
> plot(1, main = "テスト") > plot(1, main = "テスト") 18 件の警告がありました (警告を見るには warnings() を使って下さい) > warnings() 警告メッセージ: 1: 'mbcsToSbcs' 中の '繝・ 2: 'mbcsToSbcs' 中の '繝・ 略 17: 'mbcsToSbcs' 中の '繝・? 18: 'mbcsToSbcs' 中の '繝・?そして、上記のようなメッセージが出ます。
よろしくお願いします。
setHook(packageEvent("grDevices", "onLoad"),function(...) grDevices::pdf.options(family="Japan1"))に変更してファイルには出るようにできたからです。 -- 2008-05-07 (水) 23:06:06
ご勘弁を (2008-05-06 (火) 19:23:23)
以下のような状況,コマンドで,表示されるグラフィックにおいて,日本語が文字化けします。なお,ファイルに出力するとちゃんと日本語は表示されます(環境はR2.6.2 と同じで,R2.6.2で同じ事をやると,グラフィック表示も,ファイルでの日本語もちゃんと表示されていました)。> sessionInfo() R version 2.7.0 (2008-04-22) powerpc-apple-darwin8.10.1 locale: ja_JP.UTF-8/ja_JP.UTF-8/C/C/ja_JP.UTF-8/ja_JP.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base > hist(rnorm(1000), main="日本語")
# これを ~/.Rprofile に入れて(なかったら作ってね)ね setHook(packageEvent("grDevices", "onLoad"), function(...){ grDevices::quartzFonts(serif=grDevices::quartzFont( c("Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6", "Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6"))) grDevices::quartzFonts(sans=grDevices::quartzFont( c("Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6", "Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6"))) # grDevices::quartz.options(family="sans") } ) attach(NULL, name = "MacJapanEnv") assign("familyset_hook", function() { if(names(dev.cur())=="quartz") par(family="sans")}, pos="MacJapanEnv") setHook("plot.new", get("familyset_hook", pos="MacJapanEnv"))こんなので当面しのぐのはどうでしょうか. -- なかま 2008-05-07 (水) 19:42:04
シチノスケ (2008-05-01 (木) 19:15:48)
こんにちは。
次のようなデーセットがあるとします。
変数xについて,personが同じ値のもの同士で平均をとりたいのですが,どうすればいいでしょう?(この場合,4つの平均値をベクトルにして出力することになります。)x person 1 13.078577 1 2 13.365019 1 3 6.365492 2 4 6.287424 2 5 13.974501 3 6 12.838648 3 7 11.565927 4 8 10.240504 4
どうぞよろしくお願いします。
yuta (2008-05-01 (木) 14:29:36)
次のようなテーブル(またはデータフレーム)があるとしますA B C D 1 1 4 0 2 2 0 1 5 3 3 3 2 1 1 4 4 2 4 1 5 5 9 3 0このテーブルの、例えば各列の上位2つの要素だけを抽出し集計し直したテーブル(すなわち下のようなもの)を新たに定義するべく、列ベクトルのソートとmerge()を組み合わせてみたのですが、うまくいきません。うまい方法をご存じの方、ご教示いただければと思います。
こんな結果が得たい>
A B C D 1 0 4 0 2 2 0 0 5 3 4 4 0 4 0 5 5 9 0 0
yh (2008-04-29 (火) 00:43:59)
Rの初心者です。xのdata.frameにNAが含まれていると、列の合計値や平均値が求められませんが、何か簡単に求める方法はないのでしょうか。
例えば、xの内容が次の場合、A B C 1 1 2 NA 2 2 3 4 3 3 NA 5 4 4 5 6 5 5 6 7次のように書けば、
for(i in 1:3){y<-append(y,sum(x[,i][!is.na(x[,i])]))} > y [1] 15 16 22で求められることがわかりましたが、これでは記述が煩雑で長くなり、Rの簡便な表記方法で演算できるすばらしい特長を損なっているように思います。何かよい方法があると確信していますが、調べても記載が見つけられないのでお尋ねします。どうぞよろしくお願いします。
> x A B C 1 1 2 3 2 2 3 4 3 3 4 NA 4 4 5 6 > rowMeans(x, na.rm=TRUE) [1] 2.0 3.0 3.5 5.0 > rowSums(x, na.rm=TRUE) [1] 6 9 7 15
> !is.na(x) A B C [1,] TRUE TRUE TRUE [2,] TRUE TRUE TRUE [3,] TRUE TRUE FALSE [4,] TRUE TRUE TRUE > rowSums(!is.na(x)) [1] 3 3 2 3
初心者 (2008-04-27 (日) 19:22:10)
初歩的な勘違いをしていると思いますが、ご指摘くだされば幸いです。> a1<-c(1,2) > a2<-c(3,4)とし、
> for(i in 1:2){x<-paste("a",i,sep="");mean(x)}とすると、
NA NA Warning messages: 1: 引数は数値でも論理値でもありません。NA 値を返します in: mean.default(x) 2: 引数は数値でも論理値でもありません。NA 値を返します in: mean.default(x)と返ってきますが、a1,a2のそれぞれのmeanの値を返すには、
どういうプログラム文が必要でしょうか?
a1<-c(1,2) a2<-c(3,4) for(i in 1:2){ text0<-paste("x<-a",i,sep="") #実行される文を作る eval(parse(text=text0)) #textには実行される文を指定 print(mean(x)) }
すろん (2008-04-25 (金) 18:15:18)
iMacG5, MacOSX10.5.2にR2.7.0を入れました。
R2.6.2を利用していたときは,> locator()と入力してenterキーを押した後,適当にQuartzデバイス画面をクリックして再びenterキーを押せば,クリックしただけx, y座標を出力してくれたと思います。先ほどR2.7.0にアップデートして同じような操作をしたら,なかなかlocator()が終わってくれませんでした。Rのヘルプには,Escキーで終了させろと言っているようなので,それもやってみましたが終わりません。ついにはRが固まってしまうという事態になったので,やむなくRを強制終了しました。
この動作を2,3回繰り返した後,再びRを起動して,> locator(1) > locator(5)などと命令しました。これは問題なく動作しました。しかしlocator(5)を途中で終わらせようとするとうまくいきません(EnterキーやEscキーを押してみたり,STOPボタンを押してみたり)。
括弧の中の数値が大きい場合など,途中でやめたい時もあるので悩んでおります。このような状況は,他の方にも現れているのでしょうか?2.7.0の仕様なので仕方がないことなのかどうか教えていただけると助かります。
subset (2008-04-23 (水) 22:56:19)
いつも拝見しております。
どうしてもうまくいかないので、ご教授を願います。
下記のようなデータフレーム DFの抜粋があるとします。
Xには何らかの数字が入っているとします。A B C D a 0.265 -0.422 -0.735 X b 0.000 0.273 -0.102 X c 0.647 -0.233 -0.593 X d 0.551 -1.171 -2.047 X e -0.078 0.177 0.213 X f 0.023 -0.330 -0.380 X g -0.129 0.086 0.277 X h 0.174 -0.571 -0.095 X i X X X X j X X X X
これから、
� (B-A) >= 0.2 または (C-A) >= 0.2
� (B-A) >= 0.2 ではあるが (C-A) >= 0.2を除くデータ
� (C-A) >= 0.2 ではあるが (B-A) >= 0.2を除くデータ
� �で作ったデータフレームを利用し (D - B) >= 0.2ではあるが (D - C) >= 0.2を除くデータ
をそれぞれ抽出し新たなデータフレームを4つ作りたいと思います。
自分なりに調べsubsetで抽出してみましたが下記のようにしても
うまくいきませんでいた。
A1 <- subset (DF, (B - A) >= 0.2 | (C - A) >= 0.2 )
A2 <- subset (DF, (B - A) >= 0.2 &! (C - A) >= 0.2)
A3 <- subset (DF, (C - A) >= 0.2 &! (B - A) >= 0.2)
B1 <- subset (A1, (D - B) >= 0.2 &! (D - C) >= 0.2)
アドバイスをいただければと思います。
よろしくお願いいたします。
set.seed(1) DF <- data.frame( A=c(.265,0,.647,.551,-.078,.023,-.129,.174,round(runif(2,0,1),3)), B=c(-.422,.273,-.233,-1.171,.177,-.330,.086,-.571,round(runif(2,0,1),3)), C=c(-.735,-.102,-.593,-2.047,.213,-.380,.277,-.095,round(runif(2,0,1),3)), D=round(runif(10,-1,1),3), row.names=letters[1:10]) A1 <- subset (DF, (B - A) >= 0.2 | (C - A) >= 0.2 ) A2 <- subset (DF, (B - A) >= 0.2 &! (C - A) >= 0.2) A3 <- subset (DF, (C - A) >= 0.2 &! (B - A) >= 0.2) B1 <- subset (A1, (D - B) >= 0.2 &! (D - C) >= 0.2) C1 <- subset (DF, (D - B) >= 0.2 &! (D - C) >= 0.2)
B1 <- subset (A1, (D - B) >= 0.2 | (D - C) >= 0.2) B2 <- subset (A1, (D - B) >= 0.2 &! (D - C) >= 0.2) B3 <- subset (A1, (D - C) >= 0.2 &! (D - B) >= 0.2)
に変更し計算させたところ、データの数が B1 = B2 + B3 になりませんでした。 内容を確認したところ、どうもB2, B3の結果はDFのデータから抽出したものになっているようです。
いろいろ調べたのですが、皆様がおっしゃるように方法自体は間違いでは ないと思うのですが。不思議でしょうがありません。-- subset 2008-04-25 (金) 09:29:34
> ( B1 <- subset (A1, (D - B) >= 0.2 | (D - C) >= 0.2) ) A B C D b 0.000 0.273 -0.102 0.322 g -0.129 0.086 0.277 0.374 i 0.266 0.573 0.202 0.540 > ( B2 <- subset (A1, (D - B) >= 0.2 &! (D - C) >= 0.2) ) A B C D g -0.129 0.086 0.277 0.374 > ( B3 <- subset (A1, (D - C) >= 0.2 &! (D - B) >= 0.2) ) A B C D b 0.000 0.273 -0.102 0.322 i 0.266 0.573 0.202 0.540 > subset (DF, (D - B) >= 0.2 &! (D - C) >= 0.2) A B C D g -0.129 0.086 0.277 0.374 h 0.174 -0.571 -0.095 -0.232 > subset (DF, (D - C) >= 0.2 &! (D - B) >= 0.2) A B C D b 0.000 0.273 -0.102 0.322 i 0.266 0.573 0.202 0.540
初心者 (2008-04-22 (火) 18:49:31)
A B C D1 a 5 1 2 c 3 0 1 a 3 1 1 b 1 0 2 a 2 0 1 a 4 0といった行列から
1 2 ←Aについての集計表 4 2 a b c ←Bについての集計表 4 1 1 1 2 3 4 5 ←Cについての集計表 1 1 2 1 1 0 1 ←Dについての集計表 4 2
といった感じで、各列の項目ごとの集計表を一つにまとめるにはどうすればよいのでしょうか?
試しに以下のようなスクリプトを書いてもみましたが、うまくいきませんでした。xlab <- c(names(x)) #列タイトルのベクトル化 n <- ncol(x) #繰り返し回数(列数)の取得 for (i in 2:n){ cbind(table(x$xlab[i-1]),table(x$xlab[i]) ) }
アドバイスいただけないでしょうか?
> for (i in 1:ncol(x)) print(table(x[,i])) 1 2 4 2 a b c 4 1 1 1 2 3 4 5 1 1 2 1 1 0 1 4 2
n <- ncol(x) #各列ごとにテーブル集計を行う a <- apply(x, 2, "table") #各列のテーブルを一つのテーブルに追加 for(i in 1:n){ write.table(a[i], "y.csv", sep = ",", append = T) }
2008-04-23 (水) 11:19:13
MA (2008-04-19 (土) 20:00:30)
WindowsOSとWindowsのRで、.gzで圧縮されたパッケージを使う場合、一回展開してからzipにすると、
以下にエラーunpackPkg(pkgs[i], pkgnames[i], lib, installWithVers) :malformed bundle DESCRIPTION file, no Contains fieldとなってしまいます。
他に方法があるのでしょうか?
ちなみに、パッケージのリストには表示されません。
デッサウ (2008-04-19 (土) 19:30:38)
これから本気でRを独習しようと考えております。
理系出身であり、いまはエクセルで重回帰分析を
行っておりますが統計についての知識は乏しく、
解析自身にも自信が持てません。
正しく統計解析を行えるようになりたく
アドヴァイスありましたらよろしくお願いします。
シバタ (2008-04-18 (金) 13:12:54)
AIX6(64bit)にRの最新版をインストールしたいのですが、対応しているのでしょうか。インストールして使用している方いらっしゃいますか。もし情報がありましたら、教えて下さい。宜しく御願い致します。
初心者 (2008-04-16 (水) 12:13:24)
画像ファイルの上書きを防止するにはどうすればよいのでしょうか?
write()などだと、append = Tとすることで上書きを防ぐことができると思いますが、pdfやpngなどの画像ファイルでappend = Tを入れても、「使われていない引数」と言われてしまいます。
よろしくおねがいします。
if(file.exists(file <- "hoge.pdf")) { stop("File already exists.") } else { pdf(file) plot(1:10) dev.off() }
> png(); plot(runif(10)); plot(runif(20)); dev.off(); list.files() null device 1 [1] "Rplot001.png" "Rplot002.png"Tips はファイル名に %d というおまじないを書き込むことです。例えば png(file="myplot%2d.png") とでもしたらどうでしょう。もちろん連番ファイルのどれがどれかは覚えておくか、後で確認する必要があります. ?png より:
If you plot more than one page on one of these devices and do not include something like '%d' for the sequence number in 'file', the file will contain the last page plotted.
$ R -q > png("hoge%i.png") > plot(sin,-pi,pi) > plot(cos,-pi,pi) > dev.off() > q("no") $ convert -append hoge1.png hoge2.png hoge.pngと言うような事を御所望? -- なかま 2008-04-16 (水) 18:07:29
png(filename ="Rplot%03d.png")
plot(1:10) plot(1:15)
plot(1:20) dev.off() こうすると、連番でRplot001-003までが作成されます。
次に、以下の処理を行うと…
png(filename ="Rplot%03d.png") plot(1:30) plot(1:200) plot(1:300) dev.off()
上で作成した連番のRplot001-003に上書きされる形でRplot001-003が作成されます。
できれば、ここを「Rplot004-006という感じで作成したい」と思っています。 これが無理であれば、テキストファイルなどの作成時、append=Tにしたとき、「warning が出て、上書きされない」ということができればと思っています。
いかがでしょうか?
> list.files(patt=glob2rx("Myplot*.png")) [1] "Myplot1.png" "Myplot2.png" "Myplot3.png" # 既に1から始まる連番ファイルになっているとして > png(file=paste("Myplot", 1+length(list.files(patt=glob2rx("Myplot*.png"))),".png", sep="")) > plot(runif(10)); dev.off() null device 1 > list.files(patt=glob2rx("Myplot*.png")) [1] "Myplot1.png" "Myplot2.png" "Myplot3.png" "Myplot4.png"
iris (2008-04-14 (月) 12:13:08)
いつもお世話になっています。
複数のグラフを一括で見るためにグラフを並べるにはどうすればよいのでしょうか?
調べてpar(mfrow)を試してみたのですが、できるものとできないものがあり困っています。
できるもの
par(mfrow = c(3,2))
plot(1:5)
plot(1:10)
plot(1:15)
…
できないもの
x <- iris
par(mfrow = c(3,2))
histogram(~Sepal.Length, data = x)
histogram(~Sepal.Width, data = x)
histogram(~Petal.Length, data = x)
…
この場合、ヒストグラムは(小さなサイズでは表示されず)一つのグラフを表示させた時と同じサイズで表示され、連続で図を入力すると並べて表示されずに新しいものが表示されてしまいます(おそらく重ね書きされているだけ)。
アドバイスいただけると嬉しいです。
(2008-04-13 (日) 18:42:58)
お世話になっております。
VC++6.0上でアプリをつくっています。
目的は「C++のアプリで、C++のソース上からRの関数を実行すること」です。
現在、R.dll をロードさせて、コンパイルを通すことまではできたのですが、Rの関数を呼び出すとAccess Violation が発生して 実行できません。
※バーションは「R-2.4.1」です。
アドバイス頂けないでしょうか。以下、私が行った操作です。
1: R.dllから Rdll.lib を生成
$pexports R.dll > R.exp$lib /def:R.exp /out:Rdll.lib 2: RのDLLとヘッダーファイルのディレクトリを指定VC++ メニューの「ツール」-「オプション」にて
・インクルードファイル "Rのルート"/include・ライブラリファイル "Rのルート"/bin 3: 1で作成したRdll.libをリンクさせる「プロジェクト」-「設定」
「リンク」- オブジェクト・ライブラリモジュールに Rdll.libを追加
4:R言語の関数を呼び出すC++コードを記述して コンパイル
たとえばこんな感じ#include <R.h> int main ( void ) { SEXP a = allocVector(STRSXP, 1); // R.dll 内の関数 return 0; }※リンクエラーも無く、コンパイルは通ります。
5:実行
→NG:allocVector関数コール時にAccessViolationが発生
(デバッガ・ステップ実行にて確認)
・そもそも、R.dll は VC++上から使用できない?
・RcppTemplate(R/C++間のインターフェース用ツール)のドキュメントを基に行いました。
名無し (2008-04-13 (日) 14:33:04)
お世話になります。
表題のとおりなのですがどうしたら良いのでしょうか?
side3の軸を下まで持ってくればいけるかと思ったのですがxlim <- c(1,5) ylim <- c(2,4) plot.new() plot.window(xlim, ylim) box() axis(1) axis(3, pos = ylim[1])中に浮いてうまく重なりませんでした。
よろしくお願いいたします。
名無し (2008-04-12 (土) 17:05:25)
お世話になります
> z <- zoo(matrix(c(1:4),2),c(as.Date("2008-01-30"),as.Date("2008-02-06"))) > z 2008-01-30 1 3 2008-02-06 2 4上のようなデータがあったとき
> julian(time(z)) [1] 13908 13915 attr(,"origin") [1] "1970-01-01"ですが、as.tsすると
> as.ts(z) Time Series: Start = 13909 End = 13916 Frequency = 0.142857142857143 zoo(coredata(x), tt).1 zoo(coredata(x), tt).2 13909 1 3 13916 2 4となりjulianのときは13908,13915だったのにas.tsでは13909,13916となりずれます。(今回のデータではたまたま1ですがそうでない場合もあるようです)
> z2 <- z > time(z2) <- julian(time(z)) > z2 13908 1 3 13915 2 4 > as.ts(z2) Time Series: Start = 13909 End = 13916 Frequency = 0.142857142857143 zoo(coredata(x), tt).1 zoo(coredata(x), tt).2 13909 1 3 13916 2 4としてもずれます。
> as.ts(z2, start=13908) Time Series: Start = 13909 End = 13916 Frequency = 0.142857142857143 zoo(coredata(x), tt).1 zoo(coredata(x), tt).2 13909 1 3 13916 2 4startは効きませんでした。
なぜなのでしょうか?
複数のデータ(日付毎のデータと週毎のデータ)を重ねてプロットする際に位置がずれて困るのですが対策法があれば教えてください。
バージョン&OSは
R version 2.6.2 (2008-02-08)
i486-pc-linux-gnu
ubuntu8(hardy)
です。
よろしくお願いいたします。
シチノスケ (2008-04-11 (金) 12:27:15)
こんにちは。
http://www.geocities.jp/t_okumurin/080411graph.bmp
にあるようなグラフをRで作りたいのですが,x軸をどうやって指定したらよいかわかりませんので,教えていただけませんでしょうか。
どうぞよろしくお願いいたします。
はーとりずむ (2008-04-10 (木) 13:30:54)
お世話になります。
質問内容は、WinXP + R2.6.2 + JRE1.6.0_05上でrJavaやiplotを使用しようとすると、エラーが出てしまい、うまく動作しません。
何か問題解決のヒントがあればご教授ください。
ちなみに実行するたびに、出てくるエラーが違うのですが、概ね下記のとおりです。
[パターン1]
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error in .jinit() : Cannot create Java virtual machine (-4)
[パターン2]
以下にエラー .jinit() : Cannot create Java virtual machine (-1)
また、SessionInfo()の情報は下記のとおりです。
R version 2.6.2 (2008-02-08)
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 base
other attached packages:
[1] rJava_0.5-1 RODBC_1.2-3
以上よろしくお願いいたします。
masa (2008-04-09 (水) 21:27:41)
例えば、下のようなデータフレームがあるとします。
A B C AB 1 6 1 AC 4 1 3 AD 3 3 1 AE 2 5 2 AF 1 1 1 AG 1 2 4
このようなデータをAの列を基準列として、大きい順に並び替え
A列に含まれる3以上を基準としB,Cを順次大きい数字順に並び替えたいと思います。
例えば下のようにです。
A B C AC 4 1 3 AD 3 3 1 AB 1 6 1 AE 2 5 2 AG 1 2 4 AF 1 1 1
一つの列のみの並び替えならば、orderを使用することで
並び替えることができました。
アドバイスをいただければと思います。
sortlist <- rev(order(DF$A )) T1 <- DF[sortlist,] T2 <- subset (T1, A >= 3.0) T3 <- subset (T1, A < 3.0) sortlist <- rev(order(T3$B )) T4 <- T3[sortlist,] T5 <- subset (T4, B >= 3.0) T6 <- subset (T4, B < 3.0) sortlist <- rev(order(T6$C )) T7 <- T6[sortlist,] T8 <- subset (T7, C >= 3.0) T9 <- subset (T7, C < 3.0) DF2 <- rbind (T2, T5, T8)
初心者 (2008-04-09 (水) 13:54:17)
R終了時に作業スペースを保存して次にそれを読み込むと以下のようなエラーメッセージが出ます。
load("C:\\Users\\tak\\Documents\\R\\workspace\\.RData")Warning message:
In readChar(con, 5) : can only read in bytes in a non-UTF-8 MBCS locale
「作業スペースの保存」とは現在の作業を保存して次に立ち上げた時に続きができるようにするものだと解釈しています。アドバイスをお願いします。
R version 2.6.2 (2008-02-08)
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 base
OS=VISTA
[以前にセーブされたワークスペースを復帰します] 起動準備中です ー Warning message:In readChar(con, 5) : can only read in bytes in a non-UTF-8 MBCS locale -- 初心者 2008-04-09 (水) 19:15:31
とのメッセージになります。
iris (2008-04-09 (水) 10:21:04)
連続する列に対して、自動的に「ヒストグラムを書いて、それを画像ファイルとして保存」という作業をするべく下のようなプログラムを書きました。
ファイル自体はできているのですが、中身は白紙になってしまいます。
アドバイスいただけると嬉しいです。
x <- iris n <- ncol(x) #繰り返し回数(列数)の取得 for (i in 1:n){ file.name <- sprintf("Fig%03i.png", i) #出力ファイルの通し番号設定 png(file.name, width = 400, height = 400) #pngデバイスドライバの用意 histogram(x[,i]) #i:列, x:データフレーム dev.off() }
library(lattice) options(device="png") png<-function(filename = "Fig%03d.png", width = 400, height = 400,...){ grDevices::png(filename,width,height,...) } lapply(iris,function(x)if(is.numeric(x))histogram(x)) dev.off()ちゃんと, 出てると思います -- なかま 2008-04-09 (水) 11:26:57
png(filename="png%i.png", width = 400, height = 400) lapply(iris, histogram) dev.off()
ma (2008-04-09 (水) 06:02:51)
データセットから分散が0のものを自動的に削除する方法を探してます。
updateなどを使う方法は理解してますが、一括で行う方法が見つかりません。
nami (2008-04-08 (火) 23:51:38)
ある2つのデータフレームをmergeした時、欠損値はNAとなってしまいます。
このNAを0に置換したいのですがうまくいきません。例えば、> datA <- data.frame(x = c("A","B","C"), y = c(1:3)) > datB <- data.frame(x = c("A","B","D"), z = c(4:6)) > (datC <- merge(datA, datB, all = TRUE, by = "x")) x y z 1 A 1 4 2 B 2 5 3 C 3 NA 4 D NA 6この中のNAを0に置換したいのです。
datD <- replace(datC, which(is.na(datC)), 0)
などとしてみましたが以下にエラー `[<-.data.frame`(`*tmp*`, list, value = 0) : 新しい列は既存の列に穴を開けるかも知れませんうまくいきませんでした。となり、うまくいきませんでした。
どなたか、ご教示くだされば幸いです。
環境はR2.6.2、windowsXP SP2です。
宜しくお願いします。
> datC[is.na(datC)] <- 0 > datC x y z 1 A 1 4 2 B 2 5 3 C 3 0 4 D 0 6
kado (2008-04-08 (火) 23:17:57)
Graphviz用に書かれたプログラムをRgraphvizで簡単に実行する方法はないでしょうか?
semで得られた結果をグラフ化するとき、いちいちGraphvizを通してグラフを作成するのではなく、Rgraphvizを用いてR上で描画した方が手間が少ないのではないかと考えました。
なにかよい方法はないでしょうか?
DataFrame (2008-04-08 (火) 16:23:58)
はじめまして、データフレームのrowname操作について質問します。
下のようなデータフレームがあるとします。a b c 1 h 0 2 2 l 1 3 3 h 1 2このデータを次のようにしたいと考えています。
b c h 0 2 l 1 3 h 1 2どの様にすればよいでしょうか?解決方法をお願いいたします。
x <- data.frame(matrix(1:12,3)) colnames(x) <- rep("A",4) x <- t(x) rownames(x)で、これをしていて気づいたのですが、
x <- data.frame(matrix(1:12,3)) colnames(x) <- rep("A",4) x <- t(x) rownames(x) as.data.frame(t(x)) # エラー rownames(as.data.frame(t(x))) # 重複したrownameを返す。なんだか奇妙ですね。 -- akira 2008-04-08 (火) 18:11:08
> DF2 <- transform(DF, a=paste(a, seq(nrow(DF)), sep="")) > DF2 a b c 1 h1 0 2 2 l2 0 3 3 h3 1 2
> DF3 b c h1 0 2 l2 0 3 h3 1 2 > DF3[grep("\\h", rownames(DF3)),] # grep 関数で行名が h で始まるものだけを取り出す b c h1 0 2 h3 1 2
DF3[grep("^h[[:digit:]]$", rownames(DF3)),]でしょうか?この辺は正規表現を勉強すれば解決します。 -- akira 2008-04-10 (木) 08:01:33
iris (2008-04-08 (火) 15:14:25)
a b c1 x x x 2 x x x 3 x x xこのようなデータx(具体的にはirisのデータ)のタイトルを数字に変えました。
names(x) <- c(1:ncol(x))
1 2 31 x x x 2 x x x 3 x x x
こうしたうえで、ヒストグラムを作成します。
histogram(~ 1(←変換したタイトルの番号), data = x)
すると、タイトル変換前とはまったく別の変なヒストグラムが表示されてしまいます。
変換後の数字にシングル・ダブルクオーテーションをつけても無理でした。
histogram(~ '1'(←変換したタイトルの番号), data = x)
逆に、変換を数字でなくアルファベットにしてみると、問題なく変換前と同じヒストグラムが表示されました。
histogram(~ "a"(←変換したタイトルのアルファベット), data = x)
ただ、連続する列に対して、自動的にヒストグラムを書きたいのでタイトルを数字で扱いたいのでこれでは解決策になりません。
原因と解決法などわかる方がいらっしゃいましたらよろしくおねがいします。
for (i in 1:4) histogram(iris[,i])等でよいのでは?
x <- iris n <- ncol(x) #繰り返し回数(列数)の取得 for (i in 1:n){ file.name <- sprintf("Fig%03i.jpeg", i) #出力ファイルの通し番号設定 png(file.name, width = 400, height = 400) #pngデバイスドライバの用意 histogram(~ x[,i], data = x )} #i:列, x:データフレーム dev.off() }
histogram(~ x[,i], data = x )}がおかしいですね。変なところに「}」があるし、「~x[,i]」もformulaを満たしていないように思います。単純に
histogram(x[,i])としてはいかかですか?-- akira 2008-04-08 (火) 18:23:42
実行するとこんな感じになります…
> x <- iris > n <- ncol(x) #繰り返し回数(列数)の取得 > for (i in 1:n){ + file.name <- sprintf("Fig%03i.jpeg", i) #出力ファイルの通し番号設定 エラー:以下の場所で構文エラーがありました. "for (i in 1:n){ file.name <- sprintf("Fig%03i.jpeg", i) > png(file.name, width = 400, height = 400) #pngデバイスドライバの用意 以下にエラーpaste("png:", filename, sep = "") : オブジェクト "file.name" は存在しません > histogram(x[,i]) #i:列, x:データフレーム エラー:"histogram(x[,i]) > dev.off() 以下にエラーdev.off() : デバイス 1 をシャットダウンすることが出来ません(NULL デバイスです) > } エラー:"}" に構文エラーがありました
pank (2008-04-08 (火) 11:09:51)
初歩的な質問ですみません。パッケージインストール時に以下のようなエラーメッセージが出ます。たとえば“ctv”をインストールしようとすると
install.packages("ctv")install.packages("ctv") 中で警告がありました: 'lib = "C:/PROGRA~1/R/R-26~1.2/library"' は書き込み可能ではありません 以下にエラー install.packages("ctv") : パッケージをインストール出来ませんでした
OSはVISTAです。いずれのパッケージに対しても同様のエラーが出ます。どなたか解決策をよろしくお願いします。
(追記) sessionInfo() R version 2.6.2 (2008-02-08) 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 base
はじめ (2008-04-07 (月) 17:46:51)
初歩的な質問で申し訳ありません。
題名そのままなのですが、
列数(あるいは行数)不明のデータの、列数、行数をカウントするのはどうすればよいのでしょうか?
なつめ (2008-04-07 (月) 07:47:04)
初心者です、よろしくお願いします。
2列(xとy)× 100行のデータフレームがあります。
私がやりたいと思っていますのは、xの1行目から100行目のそれぞれの値に対して、
最も大きさが近い値をyの1から100行目から探し、その差を、それぞれのxの値に対して、つまり計100個求めるというものです。
どのようにしたら良いでしょうか?
d <- data.frame(x=rnorm(100), y=rnorm(100)) z <- outer(d$x, d$y, "-") apply(z, 1, function(u) { min1 <- min(c(u[u>=0], Inf)) min2 <- max(c(u[u<0], -Inf)) return(ifelse(min1 >= -min2, min2, min1)) })
ポアソン (2008-04-04 (金) 13:00:09)
下のデータは数年間に発生した二つの事象の月別発生数を示したものです。table(DAT_g$month)
1 2 3 4 5 6 7 8 9 10 11 12 1 1 0 1 1 1 2 1 0 1 1 0table(DAT_d$month)
1 2 3 4 5 6 7 8 9 10 11 12 2 1 3 4 2 0 0 3 2 2 0 4
これらから、月ごとの発生に差があるかどうかを示したいのですがどうしたらよろしいでしょうか。
> x [1] 1 1 0 1 1 1 2 1 0 1 1 0 > y [1] 2 1 3 4 2 0 0 3 2 2 0 4 > ( d <- rbind(x, y) ) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] x 1 1 0 1 1 1 2 1 0 1 1 0 y 2 1 3 4 2 0 0 3 2 2 0 4 > fisher.test(d) Fisher's Exact Test for Count Data data: d p-value = 0.2637 alternative hypothesis: two.sided
> poi_g <- c(3,8,1,0,0,0,0,0,0,0,0) > poi_d <- c(3,1,3,2,4,0,0,0,0,0,0) > sum(poi_g)/12 #lambda 発生数の月平均 [1] 1 > sum(poi_d)/12 #lambda [1] 1.083333それぞれをplotすると、poi_gはポアソン分布に近いような気がします。 ここで、Rを用いて当てはまりを評価するにはどうしたらよいでしょうか。
ぽい (2008-04-03 (木) 01:59:51)
ARIMAモデルの変数選択をstepAICを使用して行いたいのですが、そもそもstepAICはARIMAモデルでも使用できるのでしょうか?
また、変数の入力方法は
scope=~x1*x2*x3
という方法でいいのでしょうか。
> library(MASS) > g<-arima(y,order=c(1,1,1),seasonal=list(order=c(3,1,2),period=7)) > stepAIC(g,direction="both",scope=~x1*x2*x3) 以下にエラー terms.default(object) : no terms componentこのようにエラーが出ました。このエラーはどのようなエラーでしょうか。-- ぽい 2008-04-03 (木) 22:24:21
> y<-c(0,2,4,3) > x1<-c(1,0,0,0) > x2<-c(0,1,1,0) > x3<-c(0,1,1,1) > g<-arima(y,order=c(1,1,1)) > stepAIC(g,direction="both",scope=~x1*x2*x3)ご指摘の通り、stepAICを使用してARIMAモデルの変数選択はできないのですね… -- ぽい 2008-04-05 (土) 22:39:04
basel_firb (2008-03-30 (日) 09:29:36)
Window R 2.5.1を使用しています。
デスクトップ上にあるCSVファイル「test.csv」を「read.csv」構文を実行すると
以下のようなエラーが出ます。A<-read.csv("test.csv")
以下にエラーfile(file, "r") : コネクションを開くことができません 追加情報: Warning message: ファイル 'test.csv' を開くことができません, 理由は'No such file or directory'です in: file(file, "r")
directoryを指定しなければだめなのでしょうか?
また、directoryの指定方法をご教授願います。
きのねっこ (2008-03-27 (木) 11:01:16)
初めて投稿させていただきます。よろしくお願いします。
現在群平均法をつかってクラスター分析を行ない樹形図に可視化しております。(ちょうど下に投稿している ”行列の読み込み”の内容が似ております。)
その際樹形図が1000個のデータからできているので、画像に変換したとき画像がつぶれてしまって詳細がみれなくなってしまいます。ビットマップやメタデータでダウンロードして拡大しようとしてもつぶれたままで拡大してしまい見れません。
なんとかこれを解消したいので、是非教えていただけると非常に助かります。
ぽんぺい (2008-03-24 (月) 15:57:06)
ARIMA(p,d,q)モデルの次数をfor文でまわして、全通りの結果を得たいのですが、次数の組み合わせによっては、non-stationary seasonal AR part from CSSというエラーが出ます。
このfor文をtry()のなかに入れて行ってもエラーで止まってしまいます。
どのようにtryを使用すれば、エラーが出ても最後までまわすことができるのでしょうか。
layout(matrix(1:4,ncol=2)) try( for(i in 1:4){ if(i==3) i<-"a" plot(i) } )これだとエラー
layout(matrix(1:4,ncol=2)) for(i in 1:4){ if(i==3) i<-"a" try(plot(i)) }これだと大丈夫-- akira 2008-03-24 (月) 17:39:51
こやま (2008-03-19 (水) 13:50:36)
条件分岐式で計算をしようとするとエラーが出ます。非常に初歩的な質問ですみませんが、解決のヒントをいただけないでしょうか。データは文字列"t"を含むデータで、以下の様になっています。
x y t t 55 219 t t 234 -293 -122 371 t t -22 -312 t t 349 182 343 -324このデータについて、t以外の数値について条件に合致した時だけ合計する式を以下のように書きました。
n <- nrow(data) a1 <- 0 a2 <- 0 a3 <- 0 a4 <- 0 a5 <- 0 b1 <- 0 b2 <- 0 b3 <- 0 b4 <- 0 b5 <- 0 for (i in 1:n){ x <- data[i,1] y <- data[i,2] if ((x != "t") & (y != "t")) { if ((x >= 0.0) & (y >= 0.0)){ a1 <- a1 + x b1 <- b1 + y }else if ((x >= 0.0) & (y < 0.0)){ a2 <- a2 + x b2 <- b2 + y }else if ((x < 0.0) & (y <= 0.0)){ a3 <- a3 + x b3 <- b3 + y }else if ((x < 0.0) & (y > 0.0)){ a4 <- a4 + x b4 <- b4 + y }else{ a5 <- a5 + x b5 <- b5 + y } }else{ } }これを走らせると、以下のようにエラーがでます。欠損値にならないようにt以外のデータを計算するようにしたつもりですが、うまくいかないようです。長くなってすみませんが、どうぞよろしくお願いします。
以下にエラーif ((x >= 0) & (y >= 0)) { : TRUE/FALSE が必要なところが欠損値です 追加情報: 警告メッセージ: 1: >= 因子に対しては無意味です in: Ops.factor(x, 0) 2: >= 因子に対しては無意味です in: Ops.factor(y, 0)
data2 <- as.matrix(split(data, data[,1]=="t" & data[,2]=="t")[[1]]) x <- as.numeric(data2[,1]) y <- as.numeric(data2[,2]) f1 <- x >= 0 & y >= 0 a1 <- sum(x[f1]) b1 <- sum(y[f1]) f2 <- x >= 0 & y < 0 a2 <- sum(x[f2]) b2 <- sum(y[f2]) f3 <- x < 0 & y <= 0 a3 <- sum(x[f3]) b3 <- sum(y[f3]) f4 <- x < 0 & y > 0 a4 <- sum(x[f4]) b4 <- sum(y[f4]) # a5, b5 は起こらない a1;a2;a3;a4 b1;b2;b3;b4とか
data2 <- as.matrix(split(data, data[,1]=="t" & data[,2]=="t")[[1]]) x <- as.numeric(data2[,1]) y <- as.numeric(data2[,2]) f <- (sign(y)+1)*3+sign(x)+1 (a1 <- sum(x[f %in% c(4,5,7,8)])) (b1 <- sum(y[f %in% c(4,5,7,8)])) (a2 <- sum(x[f %in% 1:2])) (b2 <- sum(y[f %in% 1:2])) (a3 <- sum(x[f %in% c(0,3)])) (b3 <- sum(y[f %in% c(0,3)])) (a4 <- sum(x[f == 6])) (b4 <- sum(y[f == 6]))とか
data2 <- as.matrix(split(data, data[,1]=="t" & data[,2]=="t")[[1]]) x <- as.numeric(data2[,1]) y <- as.numeric(data2[,2]) f <- (sign(y)+1)*3+sign(x)+1 f[f %in% c(4,5,7,8)] <- "case1" f[f %in% 1:2] <- "case2" f[f %in% c(0,3)] <- "case3" f[f == 6] <- "case4" by(x, f, sum) by(y, f, sum)とか,最後の2行を以下にするとか
sapply(list(x=x, y=y), by, f, sum)
あだむす (2008-03-18 (火) 18:58:52)
はじめて投稿します。よろしくお願いします。
多重比較のパッケージmultcompの中にある関数simtestを使いたくてmulticompをインストールしました。具体的に関数simtestの使い方を見たくて
help(simtest)とすると、パッケージはインストールされているはずなのにドキュメントがないというエラーが出てしまい困っております。
library(multcomp)
help(simtest)
No documentation for 'simtest' in specified packages and libraries:
you could try 'help.search("simtest")'
help.searchでも同様にエラーがでました。libraryの中にはmultcomとmvtnormのパッケージのフォルダがあったのでインストールはされていると思うのですが・・・。
ちなみにRのバージョンは2.6.2でOSはWindows XPです。
おくむら (2008-03-11 (火) 18:05:48)
こんにちは。semパッケージを使って,
にあるようなモデルを分析したいと思うのですが,これをフィットさせるためのモデルの指定をどうしたらいいか教えてください。
一応,modelsem <- specify.model() t1 -> x1, b11, 1 t1 -> x2, b12, 1 t2 -> y1, b21, 1 t2 -> y2, b22, 1 t1 <-> t2, cort, NA e1 -> x1, be1, 1 e2 -> x2, be2, 1 e3 -> y1, be3, 1 e4 -> y2, be4, 1 x1 <-> x1, d1, NA x2 <-> x2, d2, NA y1 <-> y1, d3, NA y2 <-> y2, d4, NAこんな感じかと思ったのですが,うまくいかないので。
よろしくお願いします(ちなみに,SASではうまくいきます)。
proc calis data=data1 edf=99 all nomod; lineqs x1 = 1 f1 + e1, x2 = 1 f1 + e2, y1 = 1 f2 + e3, y2 = 1 f2 + e4; std e1-e2 = del1, e3-e4 = del2, f1 = 1, f2 = 1; cov f1 f2 = phi12; run;相関行列は人工データで発生させたものですが,^
x1 x2 y1 y2 x1 1.0000000 0.9201039 0.8892795 0.8281659 x2 0.9201039 1.0000000 0.7766174 0.7349069 y1 0.8892795 0.7766174 1.0000000 0.9515039 y2 0.8281659 0.7349069 0.9515039 1.0000000こんな感じのものが1000個あります。
modelsem <- specify.model() t1 -> x1, NA, 1 t1 -> x2, NA, 1 t2 -> y1, NA, 1 t2 -> y2, NA, 1 t1 <-> t2, phi12, NA x1 <-> x1, del1, NA x2 <-> x2, del1, NA y1 <-> y1, del2, NA y2 <-> y2, del2, NA t1 <-> t1, NA, 1 t2 <-> t2, NA, 1
朝からずっと悩んでます (2008-03-10 (月) 16:44:46)
変数名がなく,1行目からデータが入力されている Excel ファイルを読み込みたいのですが,
RODBC パッケージの odbcConnectExcel と sqlQuery を使って読み込むと,
どうしても1行目が変数名扱いになってしまうので,1行目の数値が読み込めません。
read.table の header=F のような読み込み方をするには
どうしたらいいでしょうか?
R のバージョンは 2.6.0, OS は Windows XP,
MS-Office 2003 を使用しています。
きむら (2008-03-05 (水) 19:12:50)
なかま さんの "R for OSXでIPAフォントの利用" を行っていたのですが、X11フォントの設定の "~/.Rprofile" ファイルが見つかりません。 OSはOS X 10.4ですが、ターミナルで "cd ~" "ls -a" としてみましたが表示されません。 不可視ファイルだと思いますが、どこにあるのでしょう?
こやま (2008-03-04 (火) 16:36:00)
Rで、二つの時系列データの相互相関を調べたいと思い、ccf関数を用いて計算を行いました。
計算結果はグラフになって出たのですが、相関係数の値を出力しようとすると、以下のようにエラーになって出力できません。
result1 <- ccf(dt[ ,1], dt2[ ,1], lag.max = 120, type = "correlation", plot = TRUE)
write.table(result1, file = "C:/R/result1.txt")
以下にエラーas.data.frame.default(x[[i]], optional = TRUE) : クラス "acf" はデータフレームに強制変換できません
(result1)と括弧をつけるとR画面上には出力されますが・・・。また、write()とした場合は、以下のようにエラーが出ます。
write(result1, file = "C:/R/result1.txt")
以下にエラーcat(list(...), file, sep, fill, labels, append) :引数 1 は,まだ cat で取り扱えません
どのようにすればテキストデータに出力できるでしょうか?
初歩的な質問で申し訳ありません。よろしくお願いいたします。
x <- rnorm(1000) y <- rnorm(1000) result1 <- ccf(x, y, lag.max = 120, type = "correlation", plot = TRUE) class(result1) <- "list" write.table(as.data.frame(result1)[,c(4,1)], "test.dat")
R初心者 (2008-03-03 (月) 13:00:34)
Rを用いてクラスター解析を行おうと考えています。
このとき、はじめから入っているユークリッド距離とかではなく、
自分で定義した類似度を用いたいと考えています。
そこで、perlを用いて類似度の行列を作成しました。
(行列の形は三角行列です。)
しかし、読み込もうとすると、要素が有りませんとエラーが出てしまいます。
類似度のデータをどのような形で取り込めば良いのでしょうか?
教えてください。お願いします。
0.0000000 0.0000000 0.0000000 0.00000000 0.0000000 0.9118028 0.0000000 0.0000000 0.00000000 0.0000000 0.3342491 0.9712567 0.0000000 0.00000000 0.0000000 0.5905108 0.6187089 0.3155890 0.00000000 0.0000000 0.6783135 0.3242619 0.9274259 0.01916572 0.0000000のようなデータがデータファイル test.dat にあるとして,以下のようにすればデンドログラムが描かれるはずですが???
> x <- matrix(scan("test.dat"), 5, byrow=TRUE) Read 25 items > y <- as.dist(x) > ans <- hclust(y) > plot(ans)
test.datはこんなcsv 1 .5,1 .2,.3,1 .1,.6,.4,1 > dat <- read.csv("test.dat", header=FALSE, row.names=FALSE) > dat V1 V2 V3 V4 1 1.0 NA NA NA 2 0.5 1.0 NA NA 3 0.2 0.3 1.0 NA 4 0.1 0.6 0.4 1 > hclust(dat) 以下にエラー if (n < 2) stop("must have n >= 2 objects to cluster") : 引数の長さが0です > is(dat) [1] "data.frame" "oldClass" > hclust(as.dist(dat)) Call: hclust(d = as.dist(dat)) Cluster method : complete Number of objects: 4 > cl <- hclust(as.dist(dat)) > is(cl) [1] "hclust" > plot(cl)とか。 -- akira 2008-03-03 (月) 19:26:48
初心者です。。。 (2008-02-29 (金) 14:47:17)
棒グラフとerror barで
mean±se
をあらわす方法を教えて下さい。
barplotで棒グラフはかけるのですが、どうやってerror barを
つけたらよいのでしょうか?
宜しくお願いします。
> RSiteSearch("barplot {error bar} standard")で検索しよう-- 谷村 2008-02-29 (金) 15:12:06
ろろ (2008-02-27 (水) 01:36:41)
[1]を出力しない方法を教えて下さい。
よろしくお願いします。
すろん (2008-02-26 (火) 13:18:54)
はじめまして。お世話になります。
length()を使うと,> data_a <- c(1.5, 1.2, 1.3, 1.6, 1.2, NA, 1.2, 1.5, 1.7, NA) > length(data_a) > [1] 10
のようにベクトルdata_aの長さを得ることができます。この場合,NA値もカウントされます。length()では,na.rm=TRUEのような使い方ができません。NA値を除いた数値の数のみを得たい場合には,どのようにすれば良いのでしょうか?
これまでに私が試したのは,(1)あらかじめNA値を削除したベクトルを作成してからlength()を実行する。(2)xtab()やtable()などで集計表を改めて作る。というようなものです。また,RjpWiki上で「データ数を得る」や「データ長」ののような語句で検索をしました。また,> library(help="base") > library(help="stats")
などを実行して探したり,「The R Tips」,「Rプログラミングマニュアル」等の解説本で,基本統計量に関する項目などを当たりましたが,よくわかりませんでした。横着をしなければ問題は感じられないことと思いますが,もしlength()やmean(), sum()などのように単純に求められる方法をご存じでしたら,是非教えていただきたいと思います。どうぞよろしくお願いいたします。
ところで,「簡単な投稿法」を参考にしたかったのですが見あたりません。見られなくなっているのでしょうか?
> ( x <- sample(c(1:3,NA), 10, rep=TRUE) ) [1] 1 2 1 1 NA NA 2 3 2 2 > !is.na(x) [1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE > sum(!is.na(x)) [1] 8こんなのもあり(素直でないが)。
> x > -Inf [1] TRUE TRUE TRUE TRUE NA NA TRUE TRUE TRUE TRUE > sum(x > -Inf, na.rm=TRUE) [1] 8まだまだあり。
> complete.cases(x) [1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE > sum(complete.cases(x)) [1] 8おそらく、以下が正統派(?)。
> na.omit(x) [1] 1 2 1 1 2 3 2 2 attr(,"na.action") [1] 5 6 attr(,"class") [1] "omit" > length(na.omit(x)) [1] 8
> is.na(c(Inf,-Inf,NaN, NA)) # NaN (Not a Number)はNA扱い [1] FALSE FALSE TRUE TRUE > complete.cases(c(Inf,-Inf,NaN,NA)) # Inf, -Inf は正当な数扱い [1] TRUE TRUE FALSE FALSE > c(Inf,-Inf,NaN,NA) > -Inf # -Inf > -Inf は FALSE [1] TRUE FALSE NA NA > na.omit(c(Inf,-Inf,NaN,NA)) [1] Inf -Inf attr(,"na.action") [1] 3 4 attr(,"class") [1] "omit"
satou (2008-02-22 (金) 23:38:08)
題名の通りですが、osx leopardでRを使用している時に、escキーを押すと落ちてしまいます。
正確に言うと、マウスカーソルが待機中(虹色でぐるぐるしてるやつです。)になり、操作を受け付けなくなってしまいます。同様の現象が出ている方、あるいはその現象を解決した方がいましたら、情報頂けると助かります。OS:Mac OS X 10.5.2 sessioninfo()の出力 R version 2.6.2 (2008-02-08) i386-apple-darwin8.10.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 methods base
はいどらりすく (2008-02-22 (金) 17:14:51)
お世話になります。
仕事でtableやxtabを使って簡単な集計をしているのですが、これらの関数ではカウントができても数値の合計ができません。
具体的には、部署別売り上げデータから年度別の部署ごとの売り上げ集計表を作りたいのです。当然、カウントではなく個々のデータが持っている売上額を合計して作表しなくてはいけませんが、このやり方がわからないのです。例を示しますと
売り上げNo 部署 売上月 金額 1 第2営業部 01 200 2 第2営業部 02 100 3 第1営業部 02 50 4 第3営業部 03 300 5 第1営業部 04 200 6 第2営業部 04 500 7 第3営業部 05 200 8 第1営業部 06 100 9 第1営業部 06 50 10 第2営業部 06 200
↓↓↓↓↓
売上げ月 部署 01 02 03 04 05 06 第1営業部 0 50 0 200 0 150 第2営業部 300 0 0 500 0 200 第3営業部 0 0 300 0 200 0
のような集計を行いたいのです。
tableやxtabsのソースを見て改造しようとも考えましたが、今の自分には全くチンプンカンプンでした。
どうぞよろしくお願い申し上げます。
もちだひろつぐ (2008-02-21 (木) 01:23:34)
pdf ファイルと postscript ファイルを作成したいのですが、今のところpdf('file.pdf', width=11, height=8.5) plot(0,0, xlab='nothing', ylab='nothing', main='NOTHING') dev.off()
postscript('file.eps', width=11, height=8.5) plot(0,0, xlab='nothing', ylab='nothing', main='NOTHING') dev.off()
と pdf() と postscript() を別々に走らせています。
これを一度で済ます方法はありますか?
上記の例だと、 plot() のところがシンプルですが、これに axis() やら legend() やら何やら加わってくると、二度走らせるのがめんどうちいです。
よろしくお願いします。
ps2pdf <- function(x, y, ...){ postscript(x, width=11, height=8.5) plot(y, ...) # 複雑な場合は適当に dev.off() system(paste("ps2pdf", x, sub("ps","pdf",x))) }とか。私も描画関係の便利関数は自作して、起動時に読み込んでます。 -- akira 2008-02-21 (木) 09:44:07
あんころ (2008-02-20 (水) 22:12:01)
txtファイルを読み込もうとすると、
file(file,"r"):コネクションを開くことができません
というエラーが出て読み込めません。
このエラーの意味は何でしょうか?
また、読み込むデータ量に限度などはあるのでしょうか?
con <- file(descroption="file", open="r") x <- readLines(con) close(con)なんてことをしたのでしょうか?
シチノスケ (2008-02-14 (木) 11:08:59)
こんにちは。
今,list形式でxj(jは1からJまで)のデータが入っているとします。これを対角要素にもつブロック対角行列Xを新たに作りたいのですが,直和を実行するためのプログラムをご存じないでしょうか?
> L <- list(matrix(seq(4),2,2),matrix(seq(9),3,3),matrix(seq(25),5,5)) > library(Matrix) > bdiag(L) 10 x 10 sparse Matrix of class "dgCMatrix" [1,] 1 3 . . . . . . . . [2,] 2 4 . . . . . . . . [3,] . . 1 4 7 . . . . . [4,] . . 2 5 8 . . . . . [5,] . . 3 6 9 . . . . . [6,] . . . . . 1 6 11 16 21 [7,] . . . . . 2 7 12 17 22 [8,] . . . . . 3 8 13 18 23 [9,] . . . . . 4 9 14 19 24 [10,] . . . . . 5 10 15 20 25 > as.matrix(bdiag(L)) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 1 3 0 0 0 0 0 0 0 0 [2,] 2 4 0 0 0 0 0 0 0 0 [3,] 0 0 1 4 7 0 0 0 0 0 [4,] 0 0 2 5 8 0 0 0 0 0 [5,] 0 0 3 6 9 0 0 0 0 0 [6,] 0 0 0 0 0 1 6 11 16 21 [7,] 0 0 0 0 0 2 7 12 17 22 [8,] 0 0 0 0 0 3 8 13 18 23 [9,] 0 0 0 0 0 4 9 14 19 24 [10,] 0 0 0 0 0 5 10 15 20 25
bdiag2 <- function(L) { a <- sapply(L, function(x) {x <- as.matrix(x); return(c(nrow(x), ncol(x)))}) l <- apply(a, 1, cumsum) n <- nrow(l) m <- array(0, dim=rowSums(a)) mapply(function(x, i, j) m[i, j] <<- x, L, mapply(seq, c(0, l[-n,1])+1, l[,1]), mapply(seq, c(0, l[-n,2])+1, l[,2])) return(m) }
みゅ (2008-02-13 (水) 06:19:19)
プログラムを書きながら前々から疑問に思っていたのですが、出来る範囲で調べてもいつもわからず、そもそもできるの事なのかできない事なのか、キーワードも調べ方もわからなくて行き詰っています。解決の方法か、鍵になる単語か、教えていただけないでしょうか。(やりたいことは明らかなのですが、うまく説明が出来なくて伝わりにくいかもしれません。例を書くので、まどろっこしいかもしれないのですが許してください。)
> DATA <- matrix(1:30,5,6)という値が入っているDATAがあったとする。
自分が生成した名前にこのデータを持たせたいと思っている。
名前の生成はたとえば、sprintf(paste("data","A",sep="_"))
とすれば生成可能ですね。でもこれは普通、> my_name <- sprintf(paste("data","A",sep="_"))のように使い、
> my_name > "data_A"となると思います。
このとき、先のDATAの値をdata_Aに持たせるのは
どのようにすればいいか、ということです。
もちろん、> my_name <- DATAとすると
> my_name > (ここに5×6の先の行列が表示される)なので、先に入れた"data_A"はきえてしまいます。
> DATA <- matrix(1:30,5,6) > my_name <- sprintf(paste("data","A",sep="_")) > ?????何らかの操作??????? > data_A > (ここに5×6の先DATAの行列が表示される)というような感じに使いたいのですが・・・。
?????何らかの操作???????は何を調べたらわかりますか????
そもそもこういうことは出来るんでしょうか???
たいち (2008-02-12 (火) 12:48:47)
こんにちは。
初歩的な質問で恐縮ですが,plot関数でグラフを作るとき,x軸の値を強制的に「4,8,12,16,20」などのように表示させるにはどうしたらよいのでしょうか?デフォルトのままだと「5,10,15,20」となってしまうのですが…。
どうぞよろしくお願いします。
plot(1:20,1:20,axes=F) axis(side=1,at=c(4,8,12,16,20));axis(side=2,at=c(4,8,12,16,20))など。詳細は?par、?plot、?axisなどを参照のこと-- yuta 2008-02-12 (火) 13:19:47
たけ (2008-02-10 (日) 11:04:03)
どろどろとしたデータの整形をしていまして、例えばx1 <- matrix(1:6,ncol=3) ;x2 <- matrix(1:4,ncol=2) colnames(x1) <- c("A","B","C"); colnames(x2) <- c("A","C")のような、列数・順序が不ぞろいなデータがもともとあって、x1[,"B"]でTRUEを返すことは容易にできますが x2[,"B"]で添字エラーではなくて、Falseを返す方法はありますでしょうか。
変わりの方法として使われる列名は決まっているので、grep("B",colnames(x2))と検索をかける方法も試してみましたが、logical(0)という戻り値をうまくTrue/Falseにするような扱いができずに悩んでいます。ご助言頂ければ幸いです
is.element(colnames(x1), "B") is.element(colnames(x2), "B")
table(factor(is.element(colnames(x2), "B"),levels=c("TRUE","FALSE")))["TRUE"]
> ifelse(class(try(y <- x2[,"B"])) == "try-error", FALSE, TRUE) Error in try(y <- x2[, "B"]) : 添え字が許される範囲外です [1] FALSE > y エラー: オブジェクト "y" は存在しません > ifelse(class(try(y <- x1[,"B"])) == "try-error", FALSE, TRUE) [1] TRUE > y [1] 3 4PS. エラーメッセージも消せました。try 関数の silent 引数、始めて気づきました。
> ifelse(class(try(y <- x2[,"B"], silent=TRUE)) == "try-error", FALSE, TRUE) [1] FALSE
okinawa (2008-02-10 (日) 09:30:46)
IntelMac,OSX10.5,R2.6.1
SVG出力させたいので、Cairoパッケージを導入しました。library(Cairo) CairoSVG("/test.svg") x<-rnorm(1:10) plot(x) title(main="試行") dev.off()
で、出力されたtest.svgをダブルクリックするとsafariがきどうしてSVGが表示されますが、"試行"部分が文字化けします。
いろいろ調べたのですが、解決できませんでした。
どなたか、ご存知の方いらっしゃいませんでしょうか?
よろしくお願いします。
library(RSvgDevice) devSVG("/test.svg") x<-rnorm(1:10) plot(x) title(main="試行") dev.off()Windowsの場合
library(RSvgDevice) devSVG("c:/test.svg") x<-rnorm(1:10) plot(x) title(main=iconv("試行","","utf-8")) dev.off()
library(Cairo) CairoSVG("cairo.svg") x<-rnorm(1:10) plot(x) title(main="試行") dev.off() library(RSvgDevice) devSVG("rsd.svg") x<-rnorm(1:10) plot(x) title(main="試行") dev.off()どちらも日本語表記可能です。
akira (2008-02-08 (金) 23:43:05)
WebServerの勉強も兼ねてRが稼働するWebServiceをlocalに建てようと思ってます。
Rweb-jpとかの設定はどうやっているのでしょうか?
apacheはここを参考にしています。お薦めがあれば教えてほしいです。> sessionInfo() R version 2.6.1 (2007-11-26) i486-pc-linux-gnu locale: LC_CTYPE=ja_JP.UTF-8;LC_NUMERIC=C;LC_TIME=ja_JP.UTF-8;LC_COLLATE=ja_JP.UTF-8; LC_MONETARY=ja_JP.UTF-8;LC_MESSAGES=ja_JP.UTF-8;LC_PAPER=ja_JP.UTF-8;LC_NAME=C; LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=ja_JP.UTF-8;LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] rcompgen_0.1-17
- どうでもいいけど。あれ,死んでるでしょ? -- 2008-02-08 (金) 23:46:57
- 個人的には、昔に参考にしたRpadがいいように思います。http://www.rpad.org/Rpad -- okinawa 2008-02-09 (土) 08:58:54
- windowsですが、昔作ったRwwwのページがあります。参考になるかわかりませんが、WebServerとRのやりとりをActiveBasicで作ったCGIでやっています。 -- okinawa 2008-02-09 (土) 11:40:28
- レスが遅れてすみません。Rの設定の前にServerに思いのほか苦戦しており、基礎から勉強する必要がありそうです。涙 -- akira 2008-02-15 (金) 21:07:51
okinawa (2008-02-08 (金) 16:33:40)
winXPsp2,R2.5.1
プログラム中で、自分自身(Rが動いているPC)のIPアドレスを取得する必要が出てまいりました。
いろいろ調べたのですが、探せませんでした。
どなたか自分自身(Rが動いているPC)のIPアドレスを取得する関数をご存知ないでしょうか?
nob (2008-02-07 (木) 16:47:36)
Rで回帰分析のスクリプトを書いて実行しています。
スクリプト中sink(file="summary.txt") summary(kaiki) sink()としているのですが、summary.txtには何も保存されていません(空っぽのファイルはできる)。
コンソール上で1行ずつ入力すると保存できますが、スクリプトで 一気に保存できる方法はありますか? よろしくお願いします。
okinawa (2008-02-07 (木) 14:42:40)
winXPsp2,R2.5.1,Rcmdr1.3.5
Rcmdrで重回帰分析やクラスター分析をする場合、変数を複数選択するところが出てきて、マウスでクリックすることで複数選択しますが、1つ置きに選択することができません。(連続したものしか選択できない)
一つ置きに選択する方法があるのでしょうか?
sho (2008-02-05 (火) 01:29:02)
自宅のPCにもRを導入しようとしたのですが、うまくいきません。
OSはビスタで、R2.6.1をインストールしたのちRcmdrのパッケージを読み込み、足りないパッケージをインストールしたのですが以下のようなのが出てきてしまいます。local({pkg <- select.list(sort(.packages(all.available = TRUE)))
if(nchar(pkg)) library(pkg, character.only=TRUE)})
要求されたパッケージ tcltk をロード中です Tcl/Tkインターフェースのロード 終了済
Please select a CRAN mirror for use in this session ---
utils:::install.packages(missing.packages[present], dependencies = TRUE, 中で警告がありました:
'lib = "C:\Users\■■■\Local Settings\Application Data\R-core\R/R/win-library/2.6"' is not writable
Error in utils:::install.packages(missing.packages[present], dependencies = TRUE, :
unable to install packages
Error in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") :
[tcl] error reading bitmap file "C:\Users\■■■\Local Settings\Application Data\R-core\R\R\win-library\2.6\Rcmdr\etc\Rcmdr.xbm".
Error : .onAttach は 'attachNamespace' で失敗しました
エラー: 'Rcmdr' に対するパッケージもしくは名前空間のロードが失敗しました
一体どうしたらよろしいのでしょうか?
よろしくお願いいたします。
yamaoyaji (2008-02-04 (月) 07:23:24)
ライブラリpvclustを用いてデータ解析をしています。
Mac OSX (10.5.1)+R(2.6.1)(Core2duo 2GHz) で解析する場合と
Fedora8(64bit) + R(2.6.1)(Core2duo 3GHz)で同じデータを解析すると約10%程度Fedoraの方が遅いです。Openmpi+Rmpi+snowでクラスタ解析をしても同じCPU数の場合、差は開く一方でした。
Fedoraの方が自由度が高く、Rを最適化できることは重々承知しておりますが、スキルがありません。ソースからのインストールもしてみましたが、あまり変化はありませんでした。
質問させていただきたいのは、なるべくdefaultの設定で早い速度のでるRを
保持できるLinuxのdistributionはどれがお勧めでしょうか。
よろしくお願いします。
kaneko (2008-02-02 (土) 16:23:24)
t分布の密度関数の線形和を返す関数を作ろうとしています.
例えば,自由度がそれぞれ10, 15, 5のt分布密度関数dt(x, 10), dt(x, 15), dt(x, 5)に対して,それぞれの自由度で重み付けした関数(の和)を
function(x){10*dt(x, 10)+15*dt(x, 15)+5*dt(x, 5)}
というように作りたいと思っています.
上の例のように加える関数の数が少ないならばすべて書き出せばいいですが,数が多くなる(約20個を想定)と大変なので,自由度のベクトルと密度関数のベクトルの内積(?)のような形でスクリプトが書けないだろうかと悩んでいます.
上記の線形和は,ある検定関数を作るためのものです.なお,Rの使用環境は version 2.6.1をOSXで使っています.
以上,ご教示頂ければ幸いです.
hidee (2008-02-01 (金) 14:54:01)
バックスラッシュが3個並んだ文字列を作りたいのですが, 単純にダブルクオーテーションのあいだに2つ並べると2つのバックスラッシュが, 奇数個並べると次の文字が奇数個目のバックスラッシュはその次の文字のエスケープに使われてしまい, 結果,生成される文字列はバックスラッシュ偶数個のものしかできません.
余分に生成しておいてsubstr()なんていうのも考えてみたんですが,これも偶数個以外ははねられてしまうようです.
よい方法が思い浮かばないのですが,ご教授いただけませんか.
> "\\\hline" [1] "\\hline" Warning messages: 1: '\h' は文字列で認識されないエスケープです 2: "\\\hline" から認識されないエスケープを取り除きました > "\\\\hline" [1] "\\\\hline" > substr("\\\\hline", 1, 999) [1] "\\\\hline" > substr("\\\\hline", 2, 999) [1] "\\hline" > sessionInfo() R version 2.6.1 (2007-11-26) i686-pc-linux-gnu locale: LC_CTYPE=ja_JP.eucJP;LC_NUMERIC=C;LC_TIME=ja_JP.eucJP;LC_COLLATE=ja_JP.eucJP; LC_MONETARY=ja_JP.eucJP;LC_MESSAGES=ja_JP.eucJP;LC_PAPER=ja_JP.eucJP;LC_NAME=C; LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=ja_JP.eucJP;LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets [6] methods base loaded via a namespace (and not attached): [1] tools_2.6.1 >
> a <- "abc" > b <- paste(a,'"""', sep="") # single quoate ではさむ > b [1] "abc\"\"\"" > c <- paste(a,"\\\\\\", sep="") > c [1] "abc\\\\\\" > d <- paste(a,"\"\"\"", sep="") > d [1] "abc\"\"\""
LUKE (2008-01-28 (月) 17:45:57)
時系列データを扱っていいて
二種類のデータを使って試したところ
ひとつだけ
Warning message:
In Ops.factor(left, right) : * 因子に対しては無意味です
というメッセージが出てきます。
データの構造によるものなのでしょうか?
アドバイスをいただけたらと思います。Book <- read.csv( a.csv', header = TRUE ) nTime1 <- nrow( Book ) flag1 <- Book[-nTime1,] != 0 BookValue1 <- rbind( 0, Book[-1,] * flag1 )R version 2.6.1 (2007-11-26)
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 base
テストデータ まともな列,異常な列 1,1 2,2 3,3 4,. 5,5 実行結果 > x <- read.csv("テストデータ", header=TRUE) > str(x) 'data.frame': 5 obs. of 2 variables: $ まともな列: int 1 2 3 4 5 $ 異常な列 : Factor w/ 5 levels ".","1","2","3",..: 2 3 4 1 5
ポンタ (2008-01-25 (金) 15:40:56)
Rをフィンメトリックス並に実装する方法を知りたく思いメールいたしました。なお、現在rcommanderなどは実装しています。
色々なhpを見て東大のライブラリからrを使って全てのパッケージをインストールすることまではやってみたのですがまず単位根検定の出し方が良く分かりません。(東大のライブラリは全部ダウンロードしました)
できれば多変量ARモデルなども動かしてみたいのですがどのように探し、どのようにセットすればよいのでしょうか?
あと、追加質問ですが、そもそも、ダウンロードしたパッケージは何かしないと使えないものでしょうか・・・
(全くの初心者ですがどなたかご教授いただければ幸いです。)
たく (2008-01-16 (水) 18:41:23)
例えば現物と先物のボラティリティを推定したい場合、2変量GARCHモデルを用いるのが一般的と思いますが、
Rには多変量GARCHモデルの関数はないのでしょうか?
検索して見つかった、tseriesパッケージやfSeriesパッケージ内のGARCH関連の関数は、みな1変量用だった気がします。
Yoshihara (2008-01-16 (水) 03:12:00)
前例がある内容でしたら申し訳ございません。
forループの中で条件を変化させて複数枚のグラフを出力し、それら全てを一つのファイルにまとめて保存しようと思っております。
例えば以下のようなプログラムで5種類のグラフを作成しても、"graph.pdf"に保存されるのはi=5におけるグラフのみです。for(i in 1:5){ name<-paste("No.",i,".pdf",sep="") curve(x+i,main=name) dev.copy(pdf,file="graph.pdf") #ファイルの保存 dev.off() }現在は dev.copy(pdf,file=name)として毎回名前を変え保存しておりますが、
グラフ数が増えると処理が面倒になるため、一つのファイル名に、ページを変えることでまとめて保存したいと考えています。
自分なりに調べてみたのですが、行き詰ってしまいました。
どなたかご教授をお願い致します。
> pdf(file="myplots.pdf", onefile=TRUE) > plot(1:10, rnorm(10)) > plot(1:10, runif(10)) > dev.off()
pdf("output.pdf") for(i in 1:5) { name<-paste("No.",i,".pdf",sep="") curve(x+i,main=name) } dev.off()
だあ (2008-01-15 (火) 14:41:37)
RMySQLパッケージをダウンロードした後に読み込もうとすると、
「Rgui:Rgui.exe - エントリーポイントが見つかりません:プロシージャエントリポイントload_defaultsがダイナミックリンクライブラリLIBMYSQL.dllから見つかりません」
というエラーが表示され、読み込むことができません。
MySQL5.0を利用しており、DBIパッケージの読み込みまでは行ったのですが、原因が思い当たる方はいらっしゃいますでしょうか。
春一番 (2008-01-14 (月) 18:57:22)
初めまして。Rの初心者なので分らないことばかりですが、宜しくお願いします。他のサイトでExcelのデータをRに移動しデータ解析が出来ることを知りました。ソフトウエアは、Visual Basic 2005,Excel2003,R2.20,RExcel v1.35です。私がしようとしていることは、Visual Basic 2005でプログラムを作成し、画面に視標を呈示します。その視標が見えたか見えないか披検者は答えます。答えた瞬間に、その結果をExcelに保存します。Excelに保存されたらすぐにRを起動し最尤法のプロビット分析を用いて50%閾値を求めます。その結果をExcelに戻し、そこからVisual Basic 2005に戻し次の視標を呈示します。これを30回〜40回自動で繰り返したいのです。こんなことは可能なのでしょうか。また、サンプルコードはあるのでしょうか?お忙しいと思いますが何卒宜しくお願い申しあげます。
lambda (2008-01-13 (日) 04:22:49)
sumとprodは見つけたのですが、足し算、かけ算以外の任意の演算で畳込みを行うときにはどうすればいいのかわかりません。
Rではベクトル化された関数を使ってmap関数と同等のことが出来たり、論理値ベクトルを[]に入れてfilter関数と同等のことが出来たりしますが、
fold関数等がなくても直接的に畳込みをする方法があったりするのでしょうか?
それともforを使って地道に変数に累積していくしかないんでしょうか…。
> ft <- function(x) {x+pi} > sapply(1:10, ft) [1] 4.141593 5.141593 6.141593 7.141593 8.141593 9.141593 10.141593 [8] 11.141593 12.141593 13.141593 > sum(sapply(1:10, ft)) [1] 86.41593 > sum(sapply(1:10, function(x) {x+pi})) # 一行で書けば [1] 86.41593もしくは outer 関数も使えるかもしれません(こっちの方が一般に早い)。
> outer(1:10,pi,"+") [,1] [1,] 4.141593 [2,] 5.141593 [3,] 6.141593 [4,] 7.141593 [5,] 8.141593 [6,] 9.141593 [7,] 10.141593 [8,] 11.141593 [9,] 12.141593 [10,] 13.141593 > sum(outer(1:10,pi,"+")) [1] 86.41593 > sum(outer(1:10,pi,"*")) [1] 172.7876 > sum(outer(1:10,pi,"^")) [1] 4074.216
あーちゃんぱぱ (2008-01-11 (金) 23:35:13)
全くの初心者です,よろしくお願いします.
MySQLのデータベースからデータを読み込んで解析を行おうとしているのですが,利用したいデータの構造が,"120, 500, 554, 578" という様なベクトル構造をしている為に読み込むと文字列として認識されてしまいます.なんとかして,このデータからベクトル c(120, 500, 554, 578)を得たいのですがどうすれば良いのでしょうか?解決法を教えて下さいよろしくお願いします.
a <- "120, 500, 554, 578" as.numeric(strsplit(a, ",")[[1]])
SIS (2008-01-11 (金) 17:15:44)
記載場所が違っていたら申し訳ありません。
windows版 R 2.4.1をインストール後、Rcmdrをダウンロードしようとしたところ、一部の関連パッケージはインストールできたのですが、ほとんどのパッケージについてURL 'http://cran.md.tsukuba.ac.jp/bin/windows/contrib/2.4/Rcmdr_1.2-9.zip' を試しています 以下にエラーdownload.file(url, destfile, method, mode = "wb") : URL'http://cran.md.tsukuba.ac.jp/bin/windows/contrib/2.4/Rcmdr_1.2-9.zip' を開けません 追加情報: Warning message: 開けません:HTTP ステータスは '403 container violation' です download.packages(pkgs, destdir = tmpd, available = available, 中で警告がありました: download of package 'Rcmdr' failedといったエラーが出てしまいました。 googleなどを検索したのですが、どのようにすれば解決するかが分かりません。 解決策をお教えください。
tukey (2008-01-11 (金) 11:47:06)
以下のように、ある区分(以下の例では、"TYPE")ごとにヒストグラムを作成することを考えておりますが、タイトルにどの区分かを表示したいと考えておりますが、どのようにすればよいか教えてください。
それぞれの区分のタイトルに、
Histogram of TYPE=1
Histogram of TYPE=2
と表示したいと考えております。
以下に簡単なプログラムの事例を載せます。AGE<-c(30,80,90,77,65,33) TYPE<-c(1,1,1,2,2,2) myhist <- function(x){ hist(x,main=paste("Histogram of TYPE=",1)) } tapply(AGE,TYPE,myhist)
hist(x,main=paste("Histogram of TYPE=",substitute(x)[[3]]))とするだけで可能です([3]より上の方が良いので訂正しました。また,失礼ながらコードの書式を勝手に直させていただきました)。 -- 中澤 2008-01-11 (金) 12:37:26
AGE<-c(30,80,90,77,65,33) TYPE<-as.factor(c("M","M","M","F","F","F")) LTYPE<-levels(TYPE) myhist <- function(x){ hist(x,main=paste("Histogram of TYPE=",LTYPE[substitute(x)[[3]]])) } tapply(AGE,TYPE,myhist)
invisible(mapply(function(x, main) hist(x, main=main), split(AGE, TYPE), paste("Histogram of TYPE=", levels(TYPE))))
kuro (2008-01-10 (木) 05:46:11)
はじめまして。
プロビット分析を行なっていて出てくるエラーの意味について教えて下さい。
当方、MASSパッケージを読み込んで、順序プロビット分析(polr()関数を使う)を行なっています。以下は、Rのコンソール画面です。
> library(MASS) > data<-read.table("data.dat",header=TRUE) > data[1:3,] popul TVnews selfLR ClinLR DoleLR PID age educ income vote reldist 1 0 7 7 1 6 6 36 3 1 1 -5 2 190 1 3 3 5 1 20 4 1 0 2 3 31 7 2 2 6 1 24 6 1 0 4 > summary(polr(as.ordered(ClinLR) ~ TVnews+selfLR+PID+age+educ+income, data=data))
と入力すると、
Error in svd(X) : 'x' に無限値か欠測値があります
と表示されます。
このエラーが何を意味しているか分からないのですが、ご存知の方がいらっしゃったら教えて下さい。よろしくお願いします
x <- matrix(1:12, ncol=4) svd(x) # エラーはでない x[1,1] <- NA svd(x) # エラーということです。
竹の山 (2008-01-08 (火) 22:28:33)
昨日から始めた初心者です。
900行X150列程度のデータのテキストファイルを分析したいので、x >- read.table(“G1.txt”, header=TRUE)
でRに読み込んで、その結果をx
で見ようとすると全部は見れません。これはアーカイブにある「R Consoleの表示容量について」の内容と同じですが、sink 関数を使って作ったテキストファイルの最後に以下のようなメッセージが出て少略されてしまいます。
[getOption("max.print") を越えました -- 末尾 190 行を省略します]]
R version 2.6.1 (2007-11-26)
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 base
> old.op <- options(max.print=999999) > old.op $max.print [1] 99999 # 既定値 > options()$max.print [1] 999999
Saito (2008-01-06 (日) 23:27:04)
WindowsXPでR2.6.1を使って一般化線形モデルによる解析を行っています。
データを読み込んでさぁ解析といったところで、次のようなメッセージがでました。x=read.table("a.txt",header=T) result=glm(A~.,data=x) エラー: サイズ 294.8 Mb のベクトルを割り当てることができません初級Q&Aの"Step関数の実行"など、似たような事例はあったのですが解決には至りませんでした。
ただ、そのやり取りの中で出てきた「WindowsのBoot.iniに/3GBスイッチをつける」 という箇所のみ調べてもできなかったので、
それで解決するというのならおしまいなのでしょうが(汗)
ちなみにglmではなくbiglmだとできるのですが…。result2=biglm(A~B+C+D+...+Z,data=x) step(result2) 以下にエラー UseMethod("extractAIC") : "extractAIC" に適用可能なメソッドがありませんというメッセージが出てstepしても何故かできないし(一応extractAICも調べましたが…よくわかりませんでした)、そのあとのモデル選択ができないんです…。
つまり、エラーが出なくなった上でstep関数等でモデル選択ができるような解決方法、
をどなたかご存知でしたらご教授お願いします。ちなみに> memory.size(T) [1] 801.5625また、memory.limitは4095に設定してあります。
よろしくお願いします。