初心者のための R および RjpWiki に関する質問コーナー
以下の 4 つの「●項目」のどれかをクリック!!
● 新規投稿欄: --- その前に,「投稿における注意事項」を読んでから!
● このページの目次 --- 質問への回答・コメントの参照
● 最新のスレッド --- 最も最近に書き込まれた「親」記事(最新のコメントが付いた記事ではありません)
● Q&A (初級者コース) 過去の目次 --- 今までの 15 個の書庫の参照
参照は,個々の項目をクリック(質問への回答・コメントの参照も,個々の項目をクリック)
まずは,「投稿における注意事項」を読んでください。
これに従わない場合には回答が得られにくい場合があります。
dk (2017-12-27 (水) 22:15:52)
あるフィールドに日本語と漢字と英語が混じっているデータ(csvファイル)を読み込むと、コンソール上で文字化けしたように表記されます。ちなみに読み込みの際にはread.csv()関数でencoding UTF-8/CP932指定やcolClasses = "character"オプション指定などを行ない、エラーは表示されていません。コンソール上の表記がおかしいのです。対処法など教えてください。
kei (2017-12-14 (木) 15:49:26)
始めて投稿させていただきます。
Win10にてR 3.4.0を使用しております。
下記のように数量化III類を行い、plotするとデータ数が多いためラベルが重なってしまいます。source("http://aoki2.si.gunma-u.ac.jp/R/src/qt1.R", encoding="euc-jp") source("http://aoki2.si.gunma-u.ac.jp/R/src/qt3.R", encoding="euc-jp") cat.dat <- read.csv("data.csv",head=T,row.names=1) cat.dat[, 1:10] <- lapply(cat.dat, factor) result.qt3 <- qt3(cat.dat) plot(result.qt3, which="sample.score")そこでggplotを試したのですが、以下のようにエラーメッセージ表示されます。
ggplot(result.qt3, which="sample.score")+geom_point() エラー: ggplot2 doesn't know how to deal with data of class qt3何か良い方法はありますでしょうか。
ご教示いただけますと幸いです。
佐々木 (2017-12-13 (水) 07:02:27)
初投稿の佐々木と申します。お世話になります。
探し回りましたがどうしても分からないため、こちらで質問させて頂きます。
【状況】
(1)手元にShift_JISで書かれたcsvファイルがあります(文字コードはnkfで確認しました)
(2)以下の方法で、readrライブラリのread_csvを使って、encodingはCP932でファイル読み込みを行いましたlibrary(readr) train <- read_csv("train.csv", locale = locale(encoding = "cp932"))(3)ところがコンソールで変数を開けてみると、セルの値が例えば<U+7CF8><U+9B5A><U+5DDD>のように化けてしまいます(厳密には文字化けとは言わないかもしれませんが・・・)。しかしヘッダーだけはちゃんと日本語になります。
【質問】
セルの値を日本語で表示できる方法を教えてください。
ご多用中恐れ入ります。何卒よろしくお願いいたします。
【参考】> sessionInfo() R version 3.4.1 (2017-06-30) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200) Matrix products: default locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] forcats_0.2.0 stringr_1.2.0 dplyr_0.7.4 purrr_0.2.4 readr_1.1.1 tidyr_0.7.2 tibble_1.3.4 [8] ggplot2_2.2.1 tidyverse_1.2.1
tyrantyas (2017-12-11 (月) 17:14:29)
環境Mac OS High Sierra R studio: 1.1.383 R: 3.4.2上記の環境にてtidyverseをインストール(install.packages("tidyverse")しようとしたところ、以下のエラーメッセージが出てしまいます。
There are binary versions available but the source versions are later: binary source needs_compilation psych 1.7.3.21 1.7.8 FALSE broom 0.4.2 0.4.3 FALSE URL 'https://cran.rstudio.com/src/contrib/broom_0.4.3.tar.gz' を試しています Content type 'application/x-gzip' length 1397648 bytes (1.3 MB) ================================================== downloaded 1.3 MB エラー: package or namespace load failed for ‘tidyverse’ in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]): ‘broom’ という名前のパッケージはありません 実行が停止されましたbroom単体をインストール(install.packages("broom"))しようとしても上記と同じエラーが出てインストールができません。
上記の通りのため、library(tidyverse)としても当然loadができない状態です。
binaryとsourceのバージョンに差がある(sourceのバージョンのほうが上)のが問題のように読めるのですが、どのように対処すればいいのかおわかりになりますでしょうか。
ruru (2017-11-12 (日) 09:58:40)
初投稿です.お世話になります.
Mac OS High Sierra をクリーンインストール後 Homebrew で R( 3.4.2 ) を install ,その後 terminal からR を立ち上げinstall.packages("RcmdrPlugin.EZR", dependencies=TRUE)で plug in をinstall すると標題のエラーが出て正常に終了できません.
terminal 上の表記を見る限りstrptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) で警告がありました: unknown timezone 'default/Asia/Tokyo'こちらの error が影響していそうなのですが web 上で解決策を見つけることができませんでした.別の PC(MacOS Sierra 同じ環境で、Homebrew, R は最新の Version です)ではこの様な現象は出ていません.tcltk2 aplpack Rcmdr この3つのパッケージが 上記の error によりinstall できていない表示になっております.ご存知の方がいらしたらお願いします.
pandapan (2017-10-26 (木) 13:36:13)
今まで通常通り、rmdファイルで保存できていたのに急に25ファイルや、26ファイルになっていしまいます。どのように変更したらrmdファイルで保存できますか。
appi (2017-10-22 (日) 12:31:04)
初投稿です.お世話になります.
mac OS Sierra 10.12.6にて、R 3.3.0を使用しております。
前置きが長くなりますが,最後までお読みいただけると幸いです.
tidyverseパッケージを用いて列"Ori_s_zone", 列"Dest_s_zone"によってグループ分けされたnested data frameが以下のようにあります.od_pair <- test %>% group_by(Ori_s_zone, Dest_s_zone) %>% nest()この時,od_pairの構造は以下のようになっており,一つの行には一つのOri_s_zone, Dest_s_zoneが対応しますが,その右側に元データの"test"上では12列分や8列分など複数列となっていたものが一つの行に格納されています.
# A tibble: 6 x 3 Ori_s_zone Dest_s_zone data <int> <int> <list> 1 1 2 <tibble [12 x 76]> 2 1 3 <tibble [8 x 76]> 3 1 4 <tibble [9 x 76]> 4 1 5 <tibble [5 x 76]> 5 1 6 <tibble [5 x 76]> 6 1 7 <tibble [7 x 76]>ここで,"data"の中の"リスト"にある各列について計算を施したく,pairを変数として以下の関数を定義します.
fn1 <- function(pair) { od_pair$data[[pair]]$d <- exp(od_pair$data[[pair]]$c) }つまり,"data"list内の"c列"と"d列"に対して計算を施しています(本当にしたい計算はもう少し複雑ですが,ここでは簡略化しております).
この計算を,さらに,"グループごと(異なる列a, 列bごと)"に施したいのですが,その計算がどのような方法を試しても出来ずに困っております.
いくつか試したものと,そのエラー内容をお示し致します.(1) lapply(od_pair$data[[1:6]],fn1) od_pair$data[[1:6]] でエラー: 再帰的な添字操作がレベル 3 で失敗しました (2) od_pair %>% dmap_at(c(関数を適用する列名全て)), fn1) エラーは出ませんが,何故か関数が適用されず,計算前の値が出力されます (3) od_pair %>% dplyr::summarise_each(funs(fn1),関数を適用する列名全て) エラー: All select() inputs must resolve to integer column positions.(2)について:https://heavywatal.github.io/rstats/purrr.html にて,「data.frameかgrouped_dfを受け取り、列ごとに.fを適用してdata.frameを返す」とあったため,dmapを用いるのかと思い,かつ,列名を指定する必要があるのかと思い,http://delta0726.web.fc2.com/packages/data/purrrlyr.html を参考にこのようなコードを書きましたが,上手くいきませんでした.
まとめますと,リスト内に適用した関数を更にグループ単位で適用するためのコードが良いものが見つからず困っております.せめてエラーの内容だけでもわかればいいのですが,それもよく自分の中で理解できずにいます.
コード,エラー内容の解釈等どのようなアドバイスでも良いので,ご回答いただけると幸いです.
よろしくお願い致します.
yellow12 (2017-10-17 (火) 09:33:29)
大変お世話になっております。Rでマルチレベル・ロジスティック回帰を行う方法をご教示いただきたく、投稿させていただきました。
仮の例として、様々な学校での生徒のデータを分析する際に、レベル1=生徒個人、レベル2=学校として、マルチレベルの2項ロジスティック回帰を行いたいと考えております。
このとき、レベル2の変数(例えば1クラス当たりの生徒数等)が生徒の満足感(1=満足、0=不満足)に与える影響を見ようとした場合、Rで分析を実行するにはどのような方法があるでしょうか。
lme4パッケージのlmer関数が使えそうなのですが(例えば以下のリンク等)、
https://www.slideshare.net/yutamura1/ss-42303827
レベル2の分散をランダム効果として組み込むまでで、その分散がどのようなレベル2変数に起因するのかまで分析する手法は見つかりませんでした。
Rでの分析方法をご存知の方がいらっしゃいましたら、ご教示いただけますと幸甚です。
何卒よろしくお願い申し上げます。
サンマ (2017-10-13 (金) 15:39:59)
お世話になります。以前から気になっていたのですが、細かく振動する曲線をplotで描くと、曲線がガタガタして描かれます。Metafileで出力してもガタガタは解消されません。Metafileでこのような現象が起こるということは、出力精度の問題でしょうか。どうすればもう少し滑らかな曲線を描けるのでしょうか。ご教示いただけましたら、幸いです。
T <- 1 n <- 1000 m <- 30 x <- T*m/n*(0:n) y <- sin(2*pi/T*x) plot(x,y,type="l")RStudioのExport/Copy to Clipboard/Copy as Metafileで出力しています。
sau (2017-10-10 (火) 15:31:21)
Rと直接関係のない質問で恐縮です。
多変量Cox解析でbackward stepwise eliminationを行う際にinclusion criteriaが0.05, exclusion criteriaが0.20というのは、単変量解析でp<0.05となる因子のみを集めて多変量解析を行い、その中でp>0.20となるものがあれば除去し、再度残りで多変量解析を行い、すべてがp<0.05となるまで繰り返すという手法と考えて宜しいでしょうか?
りんご (2017-10-06 (金) 07:25:19)
初歩的な質問ですみません。
同じカテゴリのものに同じ番号をふりたいのですが,簡単にかける方法はあるでしょうか?
period <- c(2007,2010,2011,2011,2013,2014,2014,2014,2014,2015,2016,2016,2016)
2007に1,2008に2,2009に3,2010に4,2011に5,2012に6,2013に7,2014に8,2015に9,2016に10というふうにふりたいです。(この例では2008,2009,2012は存在しませんが,そのように値が存在しないものも含めて番号をふりたいです。)
period$number <- 0
period$number <- ifelse(period$number =="2007",1, period$number)
・・・などというコードを考えてみましたが,すべてを書き出すとかなり長くなるので(実際はこの例よりもずっと多くの期間を対象としたいので),簡潔にかける方法がありましたらご教示いただけないでしょうか?どうぞよろしくお願いいたします。
year = period %/% 100 month = period %% 100 code = (year-2011)*12+month-9例
> period = c(201110, 201201, 201601, 201603) > year = period %/% 100 > month = period %% 100 > (code = (year-2011)*12+month-9) [1] 1 4 52 54もちろん一行で書いてもいいですよ。
> (period %/% 100-2011)*12+period %% 100-9 [1] 1 4 52 54
> (A <- data.frame(m = c(1, 2, 3, 4, 6, 7, 8, 10), x = c(10, 5, 4, 8, 7, 1, 7, 3))) m x 1 1 10 2 2 5 3 3 4 4 4 8 5 6 7 6 7 1 7 8 7 8 10 3 > (B <- data.frame(m = c(1, 2, 4, 6, 7, 8, 9, 10), x = c(4, 3, 5, 7, 8, 5, 10, 4))) m x 1 1 4 2 2 3 3 4 5 4 6 7 5 7 8 6 8 5 7 9 10 8 10 4 > (dat <- merge(A, B, by = "m", all = TRUE)) m x.x x.y 1 1 10 4 2 2 5 3 3 3 4 NA 4 4 8 5 5 6 7 7 6 7 1 8 7 8 7 5 8 9 NA 10 9 10 3 4 > sum(dat$x.x * dat$x.y, na.rm = TRUE) [1] 199
> a = b = numeric(54) > a[A$m] = A$x > b[B$m] = B$x > sum(a*b) [1] 199
べのたみ (2017-09-28 (木) 00:13:11)
nnetを使ってみています。
目的変数をyes,noの二値にしたのでpredict実行時には通常type="class"を指定するのだと思うのですが、type="raw"を指定しても1列分の数値が結果として出てきます。
この値は何を表しているのでしょうか?yesになる確率?noになる確率?
よろしくお願いします。
Value If type = "raw", the matrix of values returned by the trained network; if type = "class", the corresponding class (which is probably only useful if the net was generated by nnet.formula).となっていますが。 -- 河童の屁は,河童にあらず,屁である。 2017-09-28 (木) 06:53:50
yukiri (2017-09-27 (水) 15:30:39)
R初心者ですx <- c(7,6,11,11,12,8,5,18,7,8,3,5,5,10,3,10,7,8) y <- c(5,3,6,7,3,6,2,3,2,5,2,1,4,7,2,6,4,6)Rで下の計算をしたいのですが,どのように書けばよいでしょうか?
Σ[xi×Σyj]
一つ目のΣのiは1から18まで,二つ目のΣのjはi+1からi+3まで
sapply(1:15, function(i) sum(x[i]*(y[i+1:3])))
> sapply(1:18, function(i) sum(x[i]*(y[intersect(1:18, i+1:3)]))) [1] 112 96 176 121 132 56 50 162 56 56 36 65 75 120 48 100 42 0NA にしたいのなら,
> a = sapply(1:18, function(i) sum(x[i]*(y[intersect(1:18, i+1:3)]))) > a[18] = NA > a [1] 112 96 176 121 132 56 50 162 56 56 36 65 75 120 48 100 42 NAというようにも書けるが。 -- 河童の屁は,河童にあらず,屁である。 2017-09-28 (木) 10:11:35
sapply(1:18, function(i) sum(x[i]*(y[intersect(1:18, i-3:3)])))何度もお手数をおかけしますが,ご教示いただけるとありがたいです。よろしくお願いいたします。 -- yukiri 2017-09-28 (木) 14:23:28
> sapply(1:18, function(i) sum(x[i]*(y[intersect(1:18, i-1:3)]))) [1] 0 30 88 154 192 128 80 198 77 56 30 45 40 70 36 130 105 96でよいでしょう
Meda (2017-09-21 (木) 16:28:36)
下記のスクリプトで実行すると、想定外の直交表が出力されてしまいます。
理由と改善方法が分かる方、教えていただけますでしょうか?
【やりたいこと】
3因子(各3水準:A~C)、1因子(2水準:D)を使ってコンジョイントカードを作りたい。
【悩み】
生成されたカードを見ると、どのカードを見ても、A~Cの因子には「2」という水準が見当たりません。(他のサイトで調べるとカードは9パターン出来るようなのですが、このスクリプトでは8パターン生成されている点も気になります)-- スクリプト -- library(conjoint) x <- expand.grid( A = c(1,2,3), B = c(1,2,3), C = c(1,2,3), D = c(1,2) ) ccard <- caFactorialDesign(data=x, type="orthogonal") -- 出力結果(コンジョイントカード) -- A B C D #1 1 1 1 1 #2 3 1 1 1 #3 1 3 3 1 #4 3 3 3 1 #5 1 3 1 2 #6 3 3 1 2 #7 1 1 3 2 #8 3 1 3 2
> library(conjoint) > x <- expand.grid( + A = factor(c(1,2,3)), + B = factor(c(1,2,3)), + C = factor(c(1,2,3)), + D = factor(c(1,2)) + ) > > ccard <- caFactorialDesign(data=x, type="orthogonal") > ccard A B C D 4 1 2 1 1 9 3 3 1 1 10 1 1 2 1 17 2 3 2 1 21 3 1 3 1 23 2 2 3 1 29 2 1 1 2 42 3 2 2 2 52 1 3 3 2 間違った使い方 -- factor でないので,各要因とも,最小値と最大値の2水準と見られている > x <- expand.grid( + A = c(1,2,3), + B = c(1,2,3), + C = c(1,2,3), + D = c(1,2) + ) > > ccard <- caFactorialDesign(data=x, type="orthogonal") > ccard A B C D 3 3 1 1 1 7 1 3 1 1 21 3 1 3 1 25 1 3 3 1 28 1 1 1 2 36 3 3 1 2 46 1 1 3 2 54 3 3 3 2 オンラインヘルプの最初の例では,experiment の各要因は自動的に factor になる > library(conjoint) > experiment=expand.grid( + price=c("low","medium","high"), # <- ではなく = を使うと要因名が表示される + variety=c("black","green","red"), + kind=c("bags","granulated","leafy"), + aroma=c("yes","no")) > sapply(experiment, class) # 各要因は factor になっている price variety kind aroma "factor" "factor" "factor" "factor" > design<-caFactorialDesign(data=experiment,type="orthogonal") # 使用例に併せて orthogonal を指定 > print(design) # 選ばれた行番号が一致 price variety kind aroma 4 low green bags yes 9 high red bags yes 10 low black granulated yes 17 medium red granulated yes 21 high black leafy yes 23 medium green leafy yes 29 medium black bags no 42 high green granulated no 52 low red leafy no
kana (2017-09-10 (日) 16:57:19)
題名のとおりになります。無知で申し訳ありません。
> op = options(digits=15) > # データ例 > set.seed(12345) > x = rnorm(200) > # 30%, 70% 分位点を求める > y = quantile(x, c(0.3, 0.7)) > y # 分位点 y[1], y[2] 30% 70% -0.449672455944958 0.688483852252395 > # 下位 30%を g1に,中位 40% を g2 に,上位1/3 を g3 に代入する > g1 = subset(x, x < y[1]) # y[1] = 0.3 未満の x を g1 に代入 > g2 = subset(x, y[1] <= x & x < y[2]) # y[1] = 0.3 以上,y[2] = 0.7 未満の x を g2 に代入 > g3 = subset(x, y[2] <= x) # y[2] = 0.7 以上の x を g3 に代入 > # 確認 > length(g1) # 要素数 [1] 60 > range(g1) # 値の範囲 [1] -2.380358061397042 -0.453497173462763 > length(g2) # 要素数 [1] 80 > range(g2) # 値の範囲 [1] -0.448033291294470 0.687332100557042 > length(g3) # 要素数 [1] 60 > range(g3) # 値の範囲 [1] 0.691171272874884 2.655788272142795 > options(op)
oobo (2017-09-10 (日) 05:33:27)
caretの使用説明書には、”mxnetパッケージはまだCRANにはありません。インストール手順については、http://mxnet.ioを参照してください。”とあるのですがどうすればいいのでしょうか?初心者です宜しくお願い致します。
cran <- getOption("repos") cran["dmlc"] <- "https://s3-us-west-2.amazonaws.com/apache-mxnet/R/CRAN/" options(repos = cran) install.packages("mxnet")が示されるので,それを R コンソールにコピペすれば,インストールが開始される。
library(mxnet) a <- mx.nd.ones(c(2,3), ctx = mx.cpu()) b <- a * 2 + 1 bを入力して,
[,1] [,2] [,3] [1,] 3 3 3 [2,] 3 3 3が表示されれば OK なんじゃね? -- 河童の屁は,河童にあらず,屁である。 2017-09-10 (日) 07:49:34
aice (2017-07-23 (日) 19:19:07)
使用するオブジェクト・変数の数が多かったり、プログラムが複雑な場合、実行する前の初期設定や関数等で有効数字を一括に設定する方法はないでしょうか。
trauma (2017-08-24 (木) 11:51:24)
欠損値の補完をmultiple impution解析をmiceでしようとしているのですが、補完した欠損値のデータを統合したあとのデータはわかるのでしょうか?
それぞれのデータセットはわかるのですが、統合したあとのデータがわからないと、欠損値を補完したあとの解析ができないのですが。
以下のように行っているのですが、可能でしょうか?
どうかご教示お願い申しあげます。library(mice) # 欠損値を補完したデータセットの作成 imp_data<-mice(dat1, m = 5) # 分析 fit <-with(imp_data, lm(reading ~ grammar + vocab)) # 分析結果の統合 summary(pool(fit))
trauma (2017-08-22 (火) 23:35:41)
rmsでデータの欠損値の補完を行っています。元データでは結果がでるのですが、サブグループ解析でデータ数を減らすとエラーメッセージがでます。内容がまったくわからない状態です。どのように対応すれば解析できるでしょうか。
以下がエラーメッセージです。どうかご教示いただけたら幸いです。################################################################################################################# > # Conducting multiple imputation, without this, PS won't be created unless all variables have non-missing data > # Imputing missing data > ################################################################################################################# > > areg = aregImpute(ef ~ age+gender+ transporter + sbp + hr + gcs + btf +tae+intubation +hystory, data=AIS, n.impute=5, x=TRUE) Iteration 1 `[<-`(`*tmp*`, , (j + 1):(j + m), value = w) でエラー: 添え字が許される範囲外です 追加情報: 警告メッセージ: 1: rcspline.eval(z, knots = parms, nk = nk, inclx = TRUE) で: could not obtain 3 interior knots with default algorithm. Used alternate algorithm to obtain 3 knots 2: rcspline.eval(z, knots = parms, nk = nk, inclx = TRUE) で: could not obtain 3 interior knots with default algorithm. Used alternate algorithm to obtain 4 knots > fit.mi <- fit.mult.impute(ef ~ age+gender+ transporter + sbp + hr + gcs + btf +tae+intubation +hystory, lrm, areg, data=AIS)
初学者A (2017-07-28 (金) 14:28:10)
PCが非常に苦手な初学者です。
研究の関係でRで統計を行う必要があるのですがまったくすすめることができません。お力添え頂けますと幸いです。
library()で、パッケージの確認をしようとすると以下のような文章がでてきます。
また、実施ごとに表示されるファイル名が毎回異なるのも理由はわかりません、、、> library() file(con, "w") でエラー: コネクションを開くことができません 追加情報: 警告メッセージ: file(con, "w") で: ファイル 'C:\Users\夏海\AppData\Local\Temp\Rtmp06WNzx\RlibraryIQR357834512f1f' を開くことができません: No such file or directory > library() file(con, "w") でエラー: コネクションを開くことができません 追加情報: 警告メッセージ: file(con, "w") で: ファイル 'C:\Users\夏海\AppData\Local\Temp\Rtmp06WNzx\RlibraryIQR357839e71fab' を開くことができません: No such file or directory > library(lib = .Library) file(con, "w") でエラー: コネクションを開くことができません 追加情報: 警告メッセージ: file(con, "w") で: ファイル 'C:\Users\夏海\AppData\Local\Temp\Rtmp06WNzx\RlibraryIQR35782a1548c7' を開くことができません: No such file or direディレクトリは
> getwd() [1] "C:/R"libraryの指定ファイルは以下の通りでした。
> .libPaths() [1] "C:/R/R-3.4.1/library"Rではなく、エクスプロ―ラーから上記の"C:/R/R-3.4.1/library"を確認するとbase等のパッケージが確認できるので、インストール自体はできていて、libraryにちゃんと入っていると思うのでWorkしない理由が分からないです。。。
ただ、何回かRのインストールとアンインストールを繰り返してしまい不要なファイル等がどこかにできてしまっているかもしれません。。。(確認できる範囲では全て削除していますが、、)
どうか、ご教示いただければ幸いです。
使用環境は以下の通りです。R version 3.4.1 (2017-06-30) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 15063) Matrix products: default locale: [1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932 LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C [5] LC_TIME=Japanese_Japan.932 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] compiler_3.4.1
ヘッツァー (2017-07-28 (金) 05:10:31)
数値ベクトル(100,300,150,200,400)があり夫々の値に対してapple,orange,grape,mango,pineappleと言うnames属性が付いているとします。
この時、
apple 100
orange 300
grape 150
mango 200
pineapple 400
のように整列したデータフレームを作成するにはどのようにしたら良いでしょうか?
よろしくお願いいたします。
kuro (2017-07-26 (水) 11:58:24)
heatmap関数を用いてヒートマップを作成しているのですが、列のサイズが大きいデータのため非常に縦長(1:3以上)のヒートマップを作成したいと思っています。
色々試してみましたが、余白ばかりが長くなったり、文字が潰れたりして上手く行きません。
heatmapでの設定方法か、もしくは他の関数があれば教えて下さい。
コマンドは以下を使用しています。heatmap( as.matrix(data), Rowv = TRUE, Colv = NA, distfun = dist, hclustfun = hclust, col = heat.colors(255), margin=c(4,4)
bbb (2017-07-26 (水) 11:45:30)
caretパッケージで決定木(method=rpart)を行っています。
作図するために、rpart.plotを用いて行っていますが、上手くいきません。
①各ノードにサンプル数Nとその内訳(1の数と0の数)
②各ノードにそれぞれの(1の数/1と0の総数)、つまり1の割合
を図示したいのですが、どなたかお力を貸していただけないでしょうか。
イメージとしては
です。何卒よろしくお願いいたします。
aice (2017-07-23 (日) 20:13:38)
使用するオブジェクト・変数の数が多かったり、プログラムが複雑な場合、実行する前の初期設定や関数等で有効数字を一括に設定する方法はないでしょうか。
> pi [1] 3.141593 > options(digits=2) > pi [1] 3.1 > options(digits=15) > pi [1] 3.14159265358979 > sqrt(3) [1] 1.73205080756888ということ? -- 河童の屁は,河童にあらず,屁である。 2017-07-23 (日) 21:40:50
y931 (2017-07-21 (金) 19:02:32)
http://www.okadajp.org/RWiki/?R%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E7%A2%BA%E7%8E%87%E5%88%86%E5%B8%83
Rの確率分布システム
R はさまざまな確率分布に関する関数を持つ。
その他のオプションパラメータ
lower.tailの既定値は FALSE
とありますが
Rのhelpでは
lower.tail
logical; if TRUE (default), probabilities are P[X ≤ x] otherwise, P[X > x].
とあり、既定値はTRUEになっていますが・・・
どう考えたらよいでしょうか?
qnorm ( 0.975 )
=1.959964
から考えてもhelpが正しいですよね?
しょう (2017-07-17 (月) 16:16:23)
お世話になります。
mac OS Sierra 10.12.5で、R 3.4.1を使用しております。
ある測定器から、5msecごとに出力される測定データを、Rを用いて折れ線グラフにしようとしております。
測定データは、csv形式で作成されるのですが、1行につき8個ずつ(8列)データが作成されていきます。
つまり、測定順に
1行目 1 2 3 4 5 6 7 8
2行目 9 10 11 12 13 14 15 16
3行目 17 18 ...
こういった具合です。
今まではExcelでmod関数などを用いて、縦1列に並び変えてからRに持ち込んで描画していたのですが、
測定時間が数時間になるとエクセルでの手動処理にも時間がかかるようになり、
縦一列に並び変えるところからRで処理できれば、と思っております。
書籍やネットでも検索をしてみましたが、ちょうど当たるものが見当たりません。
行を指定して要素を取り出してみました( data [2, ]など) が、列名が一緒にくっついてきてしまい、
行き詰まっております。
どなたかご存知の方らおらましたら、ご教示いただけますと幸いです。
何とぞ宜しくお願い申し上げます。
y931 (2017-07-13 (木) 20:44:44)
RStudio Version 1.0.136
R Version 3.3.3
RStudio で次のようなデータフレーム作成した場合
A <- c ( 12, 10, 13 )
B <- c ( 20, 12, 16 )
C <- c ( 20, 15, 19 )
y <- data.frame (A,B,C)
グラフのタブが表れて、エクセルのようなクロス表が表示されていました.
しかし最近、その表内の行(1 , 2 , 3)と列(A , B , C)のラベルが表示されず、
ラベルセルが空白になるエラーが発生しています.
どなたか対処方法をご存知の方はお知らせください.
使用しているOSは、windows10 home, 64bit です.
yasyas (2017-07-13 (木) 18:23:00)
文字列を対応する値に変換したいと思っています。
例えば以下のような対応表があったとして、
dat <- data.frame(tar = letters[1:10], rep=10:1)
つまり"a"なら10, "b"なら9…という感じの対応表です。
置換したい文字列ベクトルが以下のように与えられているとします。
z <- c("c", "a", "b")
これを8,10,9という風な数字ベクトルに変換したいのですが、
for文を使わずにうまく変換する方法はありますでしょうか。
z <- dat[["rep"]][which(dat[["tar"]]==z)]
というようにやってみたのですが、うまくいかず。
ahagiwar (2017-06-30 (金) 13:35:08)
混合効果モデルの解析を行っています。lmerTestで混合効果モデルを解析したのですが下記の様なエラーメッセージが出て固定効果のp値を計算してくれません。ウェブで調べたのですが良くわかりませんでした。どなたか教えていただければ幸いです。> m2041 <- lmerTest::lmer(STRESS ~ 1 | ID, data=df2) > summary(m2041) summary from lme4 is returned some computational error has occurred in lmerTest Linear mixed model fit by REML ['lmerMod'] Formula: STRESS ~ 1 | ID Data: df2 REML criterion at convergence: 1672.2 Scaled residuals: Min 1Q Median 3Q Max -2.3088 -0.5454 -0.0319 0.6239 3.4587 Random effects: Groups Name Variance Std.Dev. ID (Intercept) 43.57 6.601 Residual 76.60 8.752 Number of obs: 225, groups: ID, 45 Fixed effects: Estimate Std. Error t value (Intercept) 41.524 1.144 36.3
ななな (2017-06-22 (木) 23:11:43)
Rって 1-metylhistidine っていう文字があったときに,X1.metylhistidine って勝手に変更されるのですが,どのように対処したらいいんでしょうか?
1-metylhistidine variable1 1 2 3 4 5 6これを,指定した変数名そのままで読ませる
> x <- read.table("test0622.dat", header=TRUE, check.names=FALSE) > x 1-metylhistidine variable1 1 1 2 2 3 4 3 5 6でも,使い勝手は悪いなあ
> x$"1-metylhistidine" [1] 1 3 5使いづらいこと,この上ない。そんなに長い名前付ける必要ないでしょ。寿限無かよ。藁
最初の変数 <- 1 二番目の変数 <-2 合計 <- 最初の変数 + 二番目の変数 cat(最初の変数, "+", 二番目の変数, "=", 合計)ふむ。
x <-1 y <- 2 sum <- x + y cat(x, "+", y, "=", sum)わかりやすか?(どっちもどっちだろ。入力させて実感するなら,後者かな)
一番目の変数は1とする <- 1 二番目の変数は2とする <- 2 三番目の変数は3とする <- 3 平均値は <- (一番目の変数は1とする+二番目の変数は2とする+三番目の変数は3とする)/3 print(平均値は)まあ,極端だけどね。ふつう,極端なことはしないよね。
階乗の計算をする関数 <- function(数値) { if (数値 == 1) { 1 } else { 数値*階乗の計算をする関数(数値-1) } } 階乗の計算をする関数(3) 階乗の計算をする関数(5)文字列の全置換だけの問題だ。
fac <- function(n) { if (n == 1) { 1 } else { n*fac(n-1) } } fac(3) fac(5)どこが違う?
名無し (2017-06-21 (水) 01:15:13)
Rで下記のようなデータを用いて主成分分析を行いました.[ある2グループのマウスの274代謝物の標準化を行ったデータ] ---------------------------------------------------------------- metabolite A1 A2 A3 B1 B2 B3 Glycolate 2 2 3 4 4 5 . . . . (274代謝物質) ---------------------------------------------------------------- result <- prcomp(data,scale = F) print(summary(result)) Importance of components: PC1 PC2 PC3 PC4 PC5 PC6 PC7 Standard deviation 1.6199 1.1883 1.0904 0.9896 0.9271 0.80668 0.74706 Proportion of Variance 0.2846 0.1531 0.1289 0.1062 0.0932 0.07056 0.06052 Cumulative Proportion 0.2846 0.4377 0.5666 0.6728 0.7660 0.83658 0.89710 PC8 PC9 PC10 Standard deviation 0.70142 0.67599 3.233e-08 Proportion of Variance 0.05335 0.04955 0.000e+00 Cumulative Proportion 0.95045 1.00000 1.000e+00ここで自分が疑問に感じたのが,代謝物質が274物質あるにもかかわらず,PCの数が10個しか存在しないのは,PC10の段階で累積寄与率が限りなく1に近づいたためにPC11以降が表示されなくなったのでしょうか?
代謝物が274個もあるのに,PCが10個しか表示されないのは,代謝物の濃度が限りなく低くいものが多く存在し,それらはPC11以降の主成分にほとんど影響をしていないと解釈してもいいのでしょうか?
> result <- prcomp(iris[, 1:4], scale = TRUE) # 変数ごとに標準化して分析に使う > print(summary(result)) Importance of components%s: PC1 PC2 PC3 PC4 # 4 変数データなので,4 個の主成分が得られる Standard deviation 1.7084 0.9560 0.38309 0.14393 Proportion of Variance 0.7296 0.2285 0.03669 0.00518 Cumulative Proportion 0.7296 0.9581 0.99482 1.00000 > sum(c(1.7084, 0.9560, 0.38309, 0.14393)^2) # Standard deviation を二乗して和をとると,丸めの誤差の範囲で 4 になる [1] 4.00004ちなみに,あなたが挙げたデータは標準化を行ったデータとは思えず,にもかかわらず scale=FALSE を指定しての分析はおかしい。また,あなたは 274×10 のデータ行列ではなく,転置した 10×274 のデータ行列のほうを主成分分析したかったのかな?だとしても,主成分の個数は共に 10 ではあるが。
> result <- prcomp(t(iris[, 1:4]), scale = TRUE) # 4 × 150 のデータ行列にするために転置する > print(summary(result)) Importance of components%s: PC1 PC2 PC3 PC4 # 主成分の個数は 4 と 150 の小さいほうの数になる Standard deviation 11.3362 4.5972 0.59728 1.448e-15 Proportion of Variance 0.8567 0.1409 0.00238 0.000e+00 Cumulative Proportion 0.8567 0.9976 1.00000 1.000e+00 > sum(c(11.3362, 4.5972, 0.59728, 1.448e-15)^2) # Standard deviation の平方和は丸めの誤差の範囲で 150 になる(データ行列の列数は 150 なので) [1] 150.0004分析例をまねするだけではなく,何をやりたいのかはっきりさせる必要がある。
ろん (2017-06-08 (木) 01:34:55)
お世話になります。
RExcelを動かしたくてRインストールしてRExcel64Inst3.5.1_HomeAndStudentを落としたのですが、statconnDCOMが見つかりません。
http://sunsite.univie.ac.at/rcom/
このページがスタートだと思うのですが、ここからどう辿ればいいのでしょうか。
初心者 (2017-06-04 (日) 22:58:57)
文字列1と文字列2があったときに
共通する最大長の文字列長を探し出す関数はあったりしますでしょうか?
例えば
str1 <- "abcd"
str2 <- "xxbcyy"
の場合
共通する最大長の文字列"bc"を抽出したいです。
strLongest = function(s1, s2) { n1 = nchar(s1) maxLength = 0 longestString = NULL for (i in 1:n1) { for (j in i:n1) { ps1 = substr(s1, i, j) nps1 = nchar(ps1) if (grepl(ps1, s2) && maxLength < nps1) { maxLength = nps1 longestString = ps1 } } } longestString } 実行例 > str1 <- "abcd" > str2 <- "xxbcyy" > strLongest(str1, str2) [1] "bc" > str1 = "djcejejifijcahdcefcdbefdgefhfijbdhaaihjfchidhfcdfi" > str2 = "gjfhfgbjegcbgadcbaefdeahdagfbaegadhciddefifcbhdhcj" > system.time(strLongest(str1, str2)) ユーザ システム 経過 0.017 0.000 0.017まあまあの実行速度だと思う? -- 河童の屁は,河童にあらず,屁である。 2017-06-05 (月) 11:04:48
R初心者 (2017-05-23 (火) 13:15:27)
RODBCを使用して、SQL Server 2012からデータを取得をしているのですが、エラーが発生した場合のハンドリングがうまくできません。
参考ページ(リンク名)に記載されているコード(下記)で、INSERTでキー重複が発生するようなSQLを実行させた場合でもキャッチされませんでした。library(RODBC) try.sql <- function(con.str, sql){ tryCatch({ con <- odbcDriverConnect(con.str) sqlQuery(con, sql) }, error=function(e){ print(sprintf("Query failed:connection string=%s sql=%s", con.str, sql)) print(e) }, finally=odbcCloseAll() ) }RODBCのリファレンスを見る限りですとsqlQueryの実行がエラーを挙げるような記載はなく、そもそも上記コードが動くのかが疑問です。
ご存知の方いらっしゃいましたらご教示頂きたく、よろしくお願い致します。
下記、sessioninfo()実行結果ですR version 3.3.3 (2017-03-06) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 locale: [1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932 LC_MONETARY=Japanese_Japan.932 [4] LC_NUMERIC=C LC_TIME=Japanese_Japan.932 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] RevoUtils_10.0.3 tools_3.3.3 RODBCバージョン:1.3.14
R初心者 (2017-05-22 (月) 23:47:46)
rollapplyを使って、時系列データをローリングで重回帰して結果を出力したいのですが、うまく書けません。
ran.csvには説明変数rate、growth、volと従属変数wgbi、bcaggre、em、hy、usaggre"が時系列で入っています。
以下自分なりに書いてみたコードです。
よろしくお願い致します。library(zoo) library(ggplot2) library(tseries) z.logrtn<-read.csv("rtn.csv") list<-c("wgbi", "bcaggre", "em", "hy", "usaggre") for(i in 1:length(list)) { beta<- rollapply(z.logrtn, width=30, FUN = function(z.logrtn){ t = lm(formula=list[i]~rate+growth+vol, data = as.data.frame(z.logrtn)); return(t$coef) }, by.column=FALSE, align="right") if(i==1){ res<-beta } else{ res<-merge(beta, res) } }こんなエラーが出ます。model.frame.default(formula = list[i] ~ rate + growth + vol, でエラー: 変数 ('rate' に基づく) の長さが異なります
formula=list[i]~rate+growth+volは,i=1 のときの場合,
formula=wgbi~rate+growth+volとは違いますよ。list[i] は "wgbi"という「文字列」であり,wgbi という変数名(列名)とは違う。
temp = eval(parse(text=paste(list[i], "~ rate + growth + vol"))) t = lm(formula = temp, data = as.data.frame(z.logrtn))とすればエラーはなくなり,この部分はたぶんあなたの期待通り動く。
(2017-04-30 (日) 10:01:26)
お世話になります。
文字列に格納されているひらがなをカタカナに一括で置換する方法はないでしょうか。
例えば "ABCあいウエオ" を "ABCアイウエオ" に置換したいです。
実際の文字列は長く、多くの種類があるので,できれば正規表現?で置換したいのです。
> chartr("ぁ-ゖ", "ァ-ヶ", "文字列中のひらがなをカタカナに変換するんダッテ。utf-8 だと 「ぁ-ゖ」(「ぁ-ん」でもよい)。cp932(shift-jis?) なら 「ぁ-ん」。") # ぁ,ゖ,ァ,ヶ は小文字だよ [1] "文字列中ノヒラガナヲカタカナニ変換スルンダッテ。utf-8 ダト 「ァ-ヶ」(「ァ-ン」デモヨイ)。cp932(shift-jis?) ナラ 「ァ-ン」。" > s = 'お世話になります。 + 文字列に格納されているひらがなをカタカナに一括で置換する方法はないでしょうか。 + 例えば "ABCあいウエオ" を "ABCアイウエオ" に置換したいです。 + 実際の文字列は長く、多くの種類があるので,できれば正規表現?で置換したいのです。' > cat(chartr("ぁ-ゖ", "ァ-ヶ", s)) オ世話ニナリマス。 文字列ニ格納サレテイルヒラガナヲカタカナニ一括デ置換スル方法ハナイデショウカ。 例エバ "ABCアイウエオ" ヲ "ABCアイウエオ" ニ置換シタイデス。 実際ノ文字列ハ長ク、多クノ種類ガアルノデ,デキレバ正規表現?デ置換シタイノデス。回答を期待するなら,あなたの環境 OS, R のバージョンぐらい書いてね。 -- 河童の屁は,河童にあらず, 屁である。 2017-04-30 (日) 10:41:47
NK (2017-04-21 (金) 10:30:51)
お世話になります。以下のようなデータフレームがあり、subset関数で列名と条件を指定して抽出します。id <- c( 1, 2, 3, 4, 5) h <- c(158,162,177,173,166) # 身長 w <- c( 51, 55, 72, 57, 64) # 体重 DF <- data.frame(ID=id, H=h, W=w) subset(DF, ID>3) ID H W 4 4 173 57 5 5 166 64このとき、列名"ID"が変数xに格納されている場合では、異なる結果になってしまいます。
x <- "ID" subset(DF, x>3) ID H W 1 1 158 51 2 2 162 55 3 3 177 72 4 4 173 57 5 5 166 64どのようにすれば変数をデータフレームの列名として指定できるでしょうか。
宜しくお願いします。
subset(DF, DF[[x]] > 3)とか
DF[DF[[x]] > 3, ]とか.
konpeki (2017-04-17 (月) 14:04:06)
パッケージリストの一覧が表示されません。
というか「このサイトにアクセスできません」とでるのはなぜでしょうか?
場所が移ったのですか?
y931 (2017-04-12 (水) 23:31:05)
対応のない2群のt検定の検定力分析について質問させてください
power.t.test(n=60, d=0.7, sig.level=0.05, power=NULL)
pwr.t2n.test(n1=30,n2=30,d=0.7, sig.level=0.05)
上記2式で検定力を求めたら異なる結果になりました
またGpower3.1.9.2で算出するとpwr.t2n.testの結果と同じになりました
サンプル数が異なるときにはpwrを使用するように・・・
とネット上では記載されています
powerとpwrの違いが理解できません
またGpowerの結果とpwrの結果が同じになった理由も全く分かりません・・・
何を勉強すればいいのかもわからない状況です
どうかよろしくお願いいたします
> power.t.test(n=60, d=0.7, sig.level=0.05, power=NULL) Two-sample t test power calculation n = 60 delta = 0.7 sd = 1 sig.level = 0.05 power = 0.9673141 alternative = two.sided NOTE: n is number in *each* group同じにしたいなら,n1=60,n2=60 とすること!
> pwr.t2n.test(n1=60, n2=60, d=0.7, sig.level=0.05) t test power calculation n1 = 60 n2 = 60 d = 0.7 sig.level = 0.05 power = 0.9673141 alternative = two.sidedpower.t2n.test は,「n1, n2 を別々に指定できる」ということなんですね。
とんとん (2017-04-11 (火) 02:01:10)
こんばんわ。Rでパッケージをインストールした後にLibrary()で使えるようにしても題名にあるエラーメッセージが出てPackage内の関数が使えず困っています。他のパッケージ内の関数は使えるのですが、どうすればいいかどなたか教えていただけたら幸いです。
こんばんは (2017-04-04 (火) 19:29:23)
「Brunner-Munzel検定」について一点お伺いしたい事がございます。この検定を行った際、十分な検定力があったかを確かめる為に検定力分析を行いたいと考えているのですが、適切な方法をもしご存知の方がいらっしゃいましたらご教授していただきたいです。また、もしBM検定の為の方法がなければ、代わりの方法としてt検定など類似の検定に対する検定力分析を行うことになりますでしょうか。何卒よろしくお願いいたします。
さくやひこ (2017-03-27 (月) 12:21:54)
折れ線グラフを重ね書きする際、線種(line type)をそれぞれの折れ線に与える方法について、ご質問させていただきます。
3本の線を1本ずつ描いて、それぞれに異なる線種与え、重ね書きすると、異なる線種で描かれるのですが、対応がおかしくなります。実線を指定したはずの線にダッシュが付いたり、ダッシュを指定した線に実線が付いたりします。また、それをfor文で、繰り返しをさせて描くと、3本の線が同じ線種になってしまいます。データについてですが、3本の線は、同じ形式だが異なるcsvファイル"aa", "bb", "cc"に基づいています。
どのようにすれば、このような問題を解決できるか、御教示いただければ幸いです。
なお、環境はR version 3.3.1 (2016-06-21) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 8.1 x64 (build 9200)★ データaa ↓ 他の2つ(bbとcc)も変数は同じです。
No.Tree radi year 1 1 0.000000 -166 2 1 1.290000 -161 3 1 2.000000 -156 4 1 2.806667 -151 ---中略--- 33 1 20.103333 -6 34 1 20.403333 -1 35 1 20.523333 0★ 3本の線を1つずつ描いて、それぞれに異なる線種与え、それらを重ね書きするスクリプト ↓
pp <- ggplot(NULL) # 初期値を与える line.type <- c("solid", "dashed", "twodash") # 線種を与える #--1--- x <-read.csv(aa) pp <- pp + geom_line(data=x, aes(year, radi, linetype=line.type[1])) + geom_point(data=x, aes(year, radi)) #--2--- x <- read.csv(bb) pp <- pp + geom_line(data=x, aes(year, radi, linetype=line.type[2])) + geom_point(data=x, aes(year, radi)) #--3--- x <- read.csv(cc) pp <-pp + geom_line(data=x, aes(year, radi, linetype=line.type[3])) + geom_point(data=x, aes(year, radi)) plot(pp)しかし、これをfor文で反復すると、線種の描き分けができません。
fl <- dir() # flには 3つのファイル名"aa", "bb", "cc"が代入される pp <- ggplot(NULL) # 初期値を与える line.type <- c("solid", "dashed", "twodash") # 線種を与える for(i in 1:length(fl)){ x <- read.csv(fl[i]) pp <- pp + geom_line(data=x, aes(year, radi, linetype=line.type[i])) + geom_point(data=x, aes(year, radi)) } plot(pp)
ltys <- c(1, 2, 6) f <- radi ~ year for (i in seq_along(fl)) { if (i == 1) { plot(f, data = read.csv(fl[i]), type = "b", lty = ltys[i]) } else { lines(f, data = read.csv(fl[i]), type = "b", lty = ltys[i]) } }
pp <- ggplot(NULL) # 初期値を与える x = NULL for (i in 1:length(fl)){ x = rbind(x, read.csv(fl[i])) # 1 つのデータフレームにする(やり方は問わず) } line.type <- c("solid", "dashed", "twodash") # 線種を与える for(i in 1:length(fl)){ pp <- pp + geom_line(data=x, aes(year, radi, linetype=line.type[No.Tree])) + geom_point(data=x, aes(year, radi)) } plot(pp)みたいにするんだろうね。aes の内側には,図形描画要素を変数を使って指定する。aes の外側なら,定数で指定するんだろうね。
こんばんは (2017-03-26 (日) 01:29:18)
目的はrstanの実行なのですが、いろいろやった結果、library(rstan)で、「1: パッケージ ‘rstan’ はバージョン 3.3.3 の R の下で造られました 2: パッケージ ‘ggplot2’ はバージョン 3.4.0 の R の下で造られました 3: get(Info[i, 1], envir = env) で: internal error -3 in R_decompress1 エラー: パッケージ ‘ggplot2’ をロードできませんでした 」がでます。しかも、install.packages("ggplot2")に「 パッケージ ‘ggplot2’ が利用できません (for R version 3.3.1) 」なってしまいます(これまでは問題なくggplot2は使ってましつた)。古いggplot2をDLてやっても、「パッケージ ‘ggplot2_2.1.0.tar.gz’ のインストールは、ゼロでない終了値をも」がでます。Rは3.3.1です。インストールのし直しはやってみました。解決策はありますか?
R初心者 (2017-03-21 (火) 12:05:58)
データirisを使いまして、> head(iris, n=2) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosairisの「1つの」変数名を引数とし、指定された変数の平均値を求める場合は、関数eval()と関数substitute()を組み合わせることで実現できます。
> f1 <- function (VAR) { + eval(substitute(TMP <- aggregate(VAR ~ Species, data=iris, mean))) + print(TMP) + } > f1(Sepal.Length) Species Sepal.Length 1 setosa 5.006 2 versicolor 5.936 3 virginica 6.588同様にして、irisの「複数の」変数名を例えばリスト化/ベクトル化して引数とし、例えば以下の様にすると、指定された変数ごとに平均値を求めようとするとエラーが出ます。
要は「複数の」変数名を上手くリスト化/ベクトル化出来ず困っています。何か良い知恵がございましたらご教示願います。> f2 <- function (VAR) { + for (i in 1:length(VAR)) { + eval(substitute(TMP <- aggregate(VAR[[i]] ~ Species, data=iris, mean))) + print(TMP) + } + } > f2(list(Sepal.Length, Petal.Length)) f2(list(Sepal.Length, Petal.Length)) でエラー: オブジェクト 'Sepal.Length' がありません > f2(c(Sepal.Length, Petal.Length)) f2(c(Sepal.Length, Petal.Length)) でエラー: オブジェクト 'Sepal.Length' がありません
> f2 = function(...) { + args = sub("\\(", "(iris$", deparse(substitute(list(...)))) + args = gsub(" ", " iris$", args) + args = sprintf("lapply(%s, function(x) aggregate(x, by=list(Species=iris$Species), FUN=mean))", args) + invisible(sapply(eval(parse(text=args)), print)) + } > f2(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) Species x 1 setosa 5.006 2 versicolor 5.936 3 virginica 6.588 Species x 1 setosa 3.428 2 versicolor 2.770 3 virginica 2.974 Species x 1 setosa 1.462 2 versicolor 4.260 3 virginica 5.552 Species x 1 setosa 0.246 2 versicolor 1.326 3 virginica 2.026汎用性なんか気にしなければ,出力結果をそのままコピーペーストして利用するのでもないのだから,以下のようにすれば関数定義も不要だし,無問題。キー入力文字数なんて,屁でもないでしょう。
> lapply(iris[,1:4], function(x) aggregate(x, by=list(iris$Species), mean)) $Sepal.Length Group.1 x 1 setosa 5.006 2 versicolor 5.936 3 virginica 6.588 $Sepal.Width Group.1 x 1 setosa 3.428 2 versicolor 2.770 3 virginica 2.974 $Petal.Length Group.1 x 1 setosa 1.462 2 versicolor 4.260 3 virginica 5.552 $Petal.Width Group.1 x 1 setosa 0.246 2 versicolor 1.326 3 virginica 2.026どうでしょうかね?? -- 河童の屁は,河童にあらず,屁である。 2017-03-21 (火) 22:22:18
f2 = function(df, ...) { invisible(lapply( lapply(unlist(list(...)), function(s) eval(parse(text=sprintf("aggregate(%s ~ Species, data=%s, mean)", s, df))) ), print)) }実行例は
> f2("iris", "Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width") Species Sepal.Length 1 setosa 5.006 2 versicolor 5.936 3 virginica 6.588 Species Sepal.Width 1 setosa 3.428 2 versicolor 2.770 3 virginica 2.974 Species Petal.Length 1 setosa 1.462 2 versicolor 4.260 3 virginica 5.552 Species Petal.Width 1 setosa 0.246 2 versicolor 1.326 3 virginica 2.026汎用化を阻まないような関数仕様にすればよいと言うこと 変数の指定を空白で区切った 1 つの文字列で指定するなら
f3 = function(df, var) { invisible(lapply( lapply(strsplit(var, " ")[[1]], function(s) eval(parse(text=sprintf("aggregate(%s ~ Species, data=%s, mean)", s, df))) ), print)) } f3("iris", "Sepal.Length Sepal.Width Petal.Length Petal.Width") # 引用符を打つ回数を減らせるf4("iris Sepal.Length Sepal.Width Petal.Length Petal.Width") のように,引数 1 つに,1 つの文字列で指定するようにするのも,応用問題。 -- 河童の屁は,河童にあらず,屁である。 2017-03-22 (水) 00:46:11
> f2_revised <- function (...) { + VAR <- unlist(list(...)) + for (i in 1:length(VAR)) { + TMP <- transform(eval(parse(text=paste("aggregate(", VAR[i], "~ Species, data=iris, mean)"))), x=VAR[i]) + colnames(TMP) <- c("Species", "Mean", "Variable") + ifelse(i==1, RESULT <- TMP, RESULT <- rbind(RESULT, TMP)) + } + return(RESULT[,c(3,1,2)]) + } > f2_revised("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width") Variable Species Mean 1 Sepal.Length setosa 5.006 2 Sepal.Length versicolor 5.936 3 Sepal.Length virginica 6.588 4 Sepal.Width setosa 3.428 5 Sepal.Width versicolor 2.770 6 Sepal.Width virginica 2.974 7 Petal.Length setosa 1.462 8 Petal.Length versicolor 4.260 9 Petal.Length virginica 5.552 10 Petal.Width setosa 0.246 11 Petal.Width versicolor 1.326 12 Petal.Width virginica 2.026
R大好き (2017-03-02 (木) 12:35:38)
> Sys.timezone() [1] "JST" > system("date") 2017年 3月 2日 木曜日 03:32:37 JST > Sys.time() [1] "2017-03-02 03:32:45 JST"となるのですが
実際にはこの表示されてる時間はUTCです$date 2017年 3月 2日 木曜日 12:33:43 JSTなるので9時間ずれてます
これはなんでこうなってしまうのでしょうか?
ちゃんとTZも設定してるのに?> Sys.time()+60*60*9 [1] "2017-03-02 12:34:31 JST"して9時間分ずらせば正しいローカルタイムにはなるのですが,こんな余計な+60*60*9 をつけずに上手くローカルタイムを表示させるにはどうすれば良いのでしょうか?
よろしくお願い致します
> system("date"); Sys.time() 2017年 3月 2日 木曜日 16:14:50 JST [1] "2017-03-02 16:14:50 JST"きちんとJST時間が表示されています。環境依存の話なので、まずは環境を開示すべきと思います。
> Sys.setenv(TZ="JST") > Sys.timezone() [1] "JST"の状態にするとおかしくなるようです。 これをするまえに Sys.getenv("TZ") すると"" が Sys.timezone() すると"Japan"がかえる状況だと正常にローカルタイムがゲットできるようです。環境変数TZを"JST"に設定したことがまずいようです -- R大好き 2017-03-02 (木) 16:41:46
$ lsb_release -d Description: Debian GNU/Linux 8.7 (jessie) $ date 2017年 3月 2日 木曜日 17:00:31 JST $ export TZ="JST" $ date 2017年 3月 2日 木曜日 08:00:42 JST $ export TZ="JST-9" $ date 2017年 3月 2日 木曜日 17:02:52 JSTつまり、JSTじゃなくてJST-9にする。詳しくはman tznameでTZの書き方を参照。
kii (2017-02-26 (日) 16:45:53)
パッケージ{quantmod}で、グラフ内に点を表示させる方法を教えて下さい。
推測ですがaddPointsという引数を使うようなのですが、マニュアルをみてもよく分かりません。調べる方法を合わせてご教授下さるとありがたいです。#https://cran.r-project.org/web/packages/quantmod/quantmod.pdf
例えば下記のグラフにおけるx=2016-01-04, y=200の地点に白色の点を描写したいと思っています。よろしくお願いいたします。library("quantmod") getSymbols("GS") #Goldman OHLC from yahoo chartSeries(GS)
library("quantmod") getSymbols("GS") #Goldman OHLC from yahoo chartSeries(GS) plot( addPoints(2016-01-04, 200, col="white") )投稿する前に,ちょっとは前の方の質問も見た方がよいね。
R大好き (2017-02-20 (月) 00:52:33)
関数内での実行環境を呼びだし元の環境に設定する方法を知りたいのですがどうやれば良いのでしょうか?
quantmodっていうパッケージのaddLines関数を使って
チャート表示した後に関数内で複数下位addLinesやaddPointsを呼びだして
ラインや点をうちたいのですが
関数内でaddLinesやaddPointsを実行してもチャートに変化があらわれません
関数内部じゃなくて親環境で実行するとチャートに反映されるので
関数内の実行環境を親環境にしてやれば関数内でも上手く処理できると思うのですが
そのやり方がわかりません
昔どこかでその方法を見た気がするのですが
ネット検索してもその元記事を発見できませんでしたので
ここで質問させていただくことにしました
よろしくお願い致します
Isan (2017-02-15 (水) 15:24:55)
Rで判別分析 library(MASS)のlda関数を使った場合と、SPSSの結果が異なるのはなぜでしょうか。データはhttp://psy.isc.chubu.ac.jp/~oshiolab/teaching_folder/datakaiseki_folder/07_folder/da07_02.htmlからお借りしました。以下のように係数が異なっています。> r.result<-lda(jidosha~., data=datscale, prior=c(0.5,0.5)) Coefficients of linear discriminants: LD1 gaikosei 1.6550380 kyomi 0.7117249 keizai -0.4656510SPSSの結果:http://psy.isc.chubu.ac.jp/~oshiolab/teaching_folder/datakaiseki_folder/07_folder/da07_02.html より
外交性 1.071 興味 0.636 経済力 -.476
> list( + mle = round(lda(自動車所有 ~ ., data = d, method = "mle")$scaling, 2), + mve = round(lda(自動車所有 ~ ., data = d, method = "mve")$scaling, 2), + moment = round(lda(自動車所有 ~ ., data = d, method = "moment")$scaling, 2)) $mle LD1 外向性 1.55 興味 0.68 経済力 -0.43 $mve LD1 外向性 2.69 興味 3.08 経済力 -1.90 $moment LD1 外向性 1.38 興味 0.61 経済力 -0.39
質問場所が不適切だったよ (2017-02-08 (水) 17:23:47)
R言語で以下のコードでわかち書きをした時に, 品詞を取り除いた形で取り出すにはどのようにしたら良いでしょうか?
また、抜き出す品詞も指定できると助かります。res = RMeCabC("今日は晴れです。")よろしくお願いいたします。
青葉46号 (2017-02-07 (火) 17:13:17)
RcmdrPlugin.survival以外のプラグインは問題なく使えるのですが、このプラグインだけが使えず困っています。
PCのOSはWindows8.1で、Rの環境は下記のとおりです。
R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)
Rcmdrのバージョン 2.3です。
RcmdrPlugin.survivalをロードすると下記のエラーが表示され、メニューが小さいままで大きく展開されずに止まります。理由がわからず困っています。Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : [tcl] invalid command name "configure".小さいメニューには[ファイル],[編集],[データ]の表示はされています。
解決法をどなたか教えてください。お願いします。
羊 (2017-02-07 (火) 01:52:27)
200×200の正方行列Aについて
各成分を90度回転させた行列Bを作りたいです。
すなわちAのi行j列の成分が
Bの201-j行i列となるような行列です。
シンプルにループを回す方法もあるかと思いますが
この処理を数十万回回す必要があるので処理の比較的早い方法があれば教えてください。
まり (2017-02-03 (金) 13:07:03)
プロット上で %->% の矢印と テキストを混ぜて使いたいです。何か方法はありますか。下の例で二番目の %->% を三番目の → にしたいです。a1 <- expression(paste('This is omega. ', omega)) a2 <- expression(paste('This is an arrow. ', '%->%')) a3 <- expression(3 %->% 33) plot(0) legend('bottomleft', c(a1,a2,a3))よろしくお願いします。
obo (2017-02-02 (木) 14:11:52)
mxnetを呼び出す時に以下のエラーが出ます。> library(mxnet) Error : オブジェクト ‘combine_edges’ は 'namespace:DiagrammeR' によってエクスポートされていません エラー: ‘mxnet’ に対するパッケージもしくは名前空間のロードが失敗しました。環境はWIN7,R×64,3.3.2です。御教授御願い致します。
かい (2017-01-27 (金) 21:01:40)
関数の実行時、一定時間(例えば1分)以内に処理が終了しない場合、
処理を強制的に停止させ、エラーを返すようなスクリプトはどのようにすれば可能でしょうか?
例えば以下のように、間違えて変数xに大きすぎる値を入れてしまった場合、強制的にエラーを返して停止できるようなものです。よろしくお願いいたします。x <- 9999999 Sys.sleep(x) print(x)
> setSessionTimeLimit(elapsed = 60); for(i in 1:10){print(i);Sys.sleep(20)} [1] 1 [1] 2 [1] 3 Sys.sleep(20) でエラー: セッション時間が経過して上限に達しました >
(2017-01-27 (金) 11:38:43)
Rで文章集合に対してTF-IDFを算出する際に
res = docMatrix("txt", pos=c("名詞", "形容詞"), weight="tf*idf*norm")
と記述するのですが, 名詞, 形容詞でも非自立語や数などを取り除きたいときはどのようにすれば良いのでしょうか
よろしくお願いいたします。
res0 <- docDF("txt", pos = c("名詞", "形容詞"), type = 1, N = 1) res <- subset(res0, POS2 != "非自立" & POS2 != "数") tf_ <- localTF(res[,-(1:3)]) # weight = "tf" tf_idf <- tf_ * globalIDF(tf_) # weight = "tf*idf" tf_idf_norm <- t(t(tf_idf) * mynorm(tf_idf)) # weight = "tf*idf*norm" result <- cbind(res[,1:3], tf_idf_norm) result
困っています。。。 (2017-01-22 (日) 13:34:42)
以下のような2種類のIDを持つデータを考えます。id1 id2 1 11 1 12 2 12 2 13 3 14 3 15 4 15この2つのIDのもし一方でも同じであれば、同一のIDを割り振るようにいたいのですが、良い知恵がうかびません。具体的には下記のnewidに相当するものを作りたいのです。
id1 id2 newid 1 11 1 1 12 1 2 12 2 2 13 2 3 14 3 3 15 3 4 15 3ご教示いいただけると幸いです。よろしくお願いします。
> d <- data.frame(id1=c(1,1,2,2,3,3,4,6,11), id2=c(11,12,12,13,14,15,15,12,21)) > d id1 id2 1 1 11 2 1 12 3 2 12 4 2 13 5 3 14 6 3 15 7 4 15 8 6 12 9 11 21 > > n <- nrow(d) > newID <- 0 > for (i in 1:n) { + found <- FALSE + for (j in seq_len(i-1)) { + if (d$id1[i] == d$id1[j] ||d$id2[i] == d$id2[j]) { + found <- TRUE + d$newid[i] <- d$newid[j] + break + } + } + if (!found) { + newID <- newID +1 + d$newid[i] <- newID + } + } > d id1 id2 newid 1 1 11 1 2 1 12 1 3 2 12 1 4 2 13 1 5 3 14 2 6 3 15 2 7 4 15 2 8 6 12 1 9 11 21 3
R勉強中 (2017-01-21 (土) 18:58:06)
パッケージlubridataがインストールできません。
「警告メッセージ: パッケージ ‘lubridata’ が利用できません (for R version 3.3.2) 」
Rのバージョンは3.3.2です。
パッケージlubridataのpdfによるとDepends methods, R (>= 3.0.0)とありますので、
バージョンの問題はないと思いますが、何が問題なのでしょうか。
ご教授いただけますと幸いです。
お手数をおかけしますがよろしくお願いたします。
> install.packages("lubridata") 警告メッセージ: パッケージ ‘lubridata’ が利用できません (for R version 3.3.2)そりゃそうだ。lubridata なんてパッケージはないんだから,利用できないのは当たり前だのクラッカー。 -- 河童の屁は,河童にあらず,屁である。 2017-01-22 (日) 07:52:23
step (2017-01-18 (水) 15:45:34)
いつもお世話になっております。
step()関数を使用していたところ、データにNAが含まれていたらしく、「使用中の行数が変わりました: 欠損値を取除きますか?」と返ってきたのですが、この質問に対して「yes」と答えて関数を続行する操作方法がわかりません。。。
(単純にyes yとうつと、オブジェクトと認識されてしまいます)
初歩的で恐縮ですが、ご教示頂けると幸いです。よろしくお願い致します。
if (all(is.finite(c(n, nnew))) && nnew != n) stop("number of rows in use has changed: remove missing values?")つまり,stop 文によって表示されているものです。文字通り,"remove missing values?" を表示して,ユーザの回答も要求しないで,処理を停止します(なんたること. そもそも,このメッセージは疑問文ではなく,命令文であるべきなんでしょうね)。
ddd_mmm (2017-01-16 (月) 17:35:34)
いつもお世話になっています。初めてご質問させて頂きます。
rpartで分割されたデータ数と元データのデータ数が一致しません。
目的変数は質的変数(2値(good/bad))、説明変数は量・質どちらも含み決定木(rpart)を実施しました。
結果、ある量的変数(以下X)が>=1.1の条件で以下のように分割する結果が出たのですが、実際に元データを見ると、x>=1.1では左箱のN数(886)ではなく464レコードなので、原因が分からず困っています。
ご教示の程、何卒よろしくお願いします。
&ref(): File not found: "Rplot01" at page "Q&A (初級者コース)/16";
以下はスクリプト例です。# データインプット data <- read.csv("分析_v6.csv", header=TRUE) head(data) # 数字データのカンマ処理 for (i in 1:ncol(data)) { data[,i]<-gsub(",", "", data[, i]) } # データ型確認 for (i in 1:ncol(data)) { print(c(names(data[i]), class(data[, i]))) } # 決定木実施 dt1 <- rpart(goodbad ~ x, data=data, parms=list(split="gini"), method="class")
> data <- read.csv("分析_v6.csv", header=TRUE) > summary(data) 区分 X前年比 bad :1049 Min. :0.790 good:1049 1st Qu.:1.020 Median :1.050 Mean :1.058 3rd Qu.:1.090 Max. :1.240 > library(rpart) > dt1 <- rpart(区分 ~ X前年比, data=data, parms=list(split="gini"), method="class") > dt1 n= 2098 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 2098 1049 bad (0.5000000 0.5000000) 2) X前年比< 1.065 1212 282 bad (0.7673267 0.2326733) * 3) X前年比>=1.065 886 119 good (0.1343115 0.8656885) * > plot(dt1) > text(dt1, use.n=TRUE, xpd=TRUE)
> x = data$X前年比 < 1.065 > table(data$区分, x) x FALSE TRUE bad 119 930 good 767 282のように,rpart の結果と同じになります(当たり前だけど)。
takapom (2017-01-16 (月) 04:31:48)
初めて質問させていただきます。numericとfactorを含む回帰分析を実施しようとして100件のデータを読み込みました。以下のような当て嵌めを行い、call関数で呼び出そうとしたところ、一部しか認識していないようです。修正方法についてご教示頂けますと幸いです。> fit.all <- glm(y ~ x + f, data = d, family = poisson) > call: glm(formula = y ~ x + f, family = poisson, data = d) Error in call:glm(formula = y ~ x + f, family = poisson, data = d) : NA/NaN argument In addition: Warning message: In call:glm(formula = y ~ x + f, family = poisson, data = d) : numerical expression has 30 elements: only the first used
大北 (2017-01-12 (木) 16:13:11)
初めてご質問させて頂きます。
Rも統計も全くの初心者であり、非常にお恥ずかしいのですが、どなたかお力添えいただけますと幸いです。
下記例のような数字が記入された行列(40000×100)が2つあります。行列1の1行目の数値と行列2の1行目の数値…という具合に、対応する行間の相関係数(Spearman)を一括で求めたいのですが、良い方法はありますでしょうか。
独学で色々と試してはいるのですが、なかなか良い方法が見つからず困っております。
何卒よろしくお願い申し上げます。症例1 症例2 症例3 症例4 症例5 1 1 3 6 7 23 2 2 4 56 5 2 3 5 6 13 2 4 4 34 23 4 13 14
症例1 症例2 症例3 症例4 症例5 1 5 3 1 3 5 2 1 2 5 2 7 3 4 4 5 6 1 4 81 42 10 53 51結果は,以下のようになるだろう。
> for (i in seq.int(nrow(x))) print (cor(x[i,], y[i,], method="spearman")) [1] 0 [1] 0.1578947 [1] -0.05129892 [1] 0.6たしかに
> cor(c(2,4,56,5,2), c(1,2,5,2,7),method="spearman") [1] 0.1578947になっていることが,確認できるであろう。【上手い方法より,確かな方法!】 -- 河童の屁は,河童にあらず,屁である。 2017-01-12 (木) 21:01:39
aaa (2017-01-05 (木) 08:33:07)
連続投稿申し訳ございません。
kmeansGapにおいて、最適クラスター数を導出する方法をあるサイトより参考にし、使用しているのですが、Gap統計量のグラフを読み取り、最適クラスター数を決定した場合とそのサイトの方法での結果に差異がございます。
具体的には下記プログラムです。x <- ClusteringMarketPotential[2:5] kg <- kmeansGap(x, nstart = 500) plot(kg) gap <- c() for(i in 1:100) { kg <- kmeansGap(x) nc <- length(kg$cluster$size) gap <- c(gap, nc) } par(ps=10) plot(table(gap), xlab="k:num.of clusters", ylab="freq.")下段の記述において、 nc <- length(kg$cluster$size)により kmeansGap 法が決定した最適なクラスター数を取り出して、gap <- c(gap,nc) により最適とされたクラスター数をカウントするための、行列を作成していると理解しているのですが、そもそもnc <- length(kg$cluster$size)の部分が気になっております。
kmeansGap法はその計算過程において最適クラスター数を求めているのでしょうか?あくまでも、Gap統計量を見るための方法と理解していたので混乱しております。
教えて頂けると幸いです。
aaa (2017-01-05 (木) 08:14:04)
いつもご教授頂き大変ありがとうございます。現在下記の様にkmeans法を使っているのですが、#k means with Market Potential Data x <- ClusteringMarketPotential[2:5] cl <- kmeans(x,3,nstart=500) cl$clusternstartの値をいくら変えても、
実行結果が変わりません。
初期値に依存のはずなのに何故だろうかと気になっております。
教えて頂けると幸いです。
kei (2016-12-31 (土) 05:56:35)
いつもお世話になっています。
以下のコードを実行する際に、rnorm()の第2引数である"mean"に1:3の
vectorがリスト番号に応じて引数として適用される理由が分かりません。
直観的には3つのリストにrnorm(x, mean = 0, sd = 1)の結果が出そうな気がします。
<実行コード>set.seed(111) 1:3 %>% map(rnorm, n = 5)<実行結果>
[[1]] [1] 1.2352207 0.6692641 0.6883762 -1.3023457 0.8291240 [[2]] [1] 2.1402782 0.5025733 0.9898116 1.0515244 1.5060378 [[3]] [1] 2.826326 2.593401 4.845636 3.394054 3.797529いろいろ調べてみると以下のような動作が関連しているように思いますが、
上記の事象の理解には至りませんでした。# 無名関数を適用 set.seed(111) 1:3 %>% map(function(x) rnorm(5, mean = x)) # ラムダ式を適用 set.seed(111) 1:3 %>% map(~ rnorm(5, mean = .x))よろしくお願いします。
1:3 %>% map(rnorm, mean=0) 1:3 %>% map(rnorm, mean=0, n=5)などをやってみれば,明らか(というか,%>% の作用がわかってないんだろうけど)
aaa (2016-12-27 (火) 14:34:11)
kmeansGap関数の結果をグラフにプロットすると
毎回結果が変わってしまうのですが、
なぜでしょうか?
ご教授頂けると幸いです。
aaa (2016-12-27 (火) 14:31:59)
GAP統計量を使いたく、
clusGap関数を持つlibrary(cluster)を
インストールしたいのですが、
既にlibrary(cluster)があるのか上手くいきません。
現状のlibrary(cluster)にはclusGap関数のファイルが見つからず。
ご教授頂けると幸いです。
User (2016-12-16 (金) 11:26:22)
http://minato.sip21c.org/medstat/how-to-multcomp.pdfを参考に、res1 <- aov(群2 ~ 群1, data=bpdown) summary(res1) library(multcomp) res2 <- glht(res1, linfct = mcp(medicine = "Dunnett")) confint(res2, level=0.95) summary(res2)でDunnett検定を実行していますが、この方法では、自分の実力
では、p値を任意の桁数で計算させることができません。
他のやり方でもいいのですが、p値を任意の桁数で計算させる
ことはできますか?よろしくお願いします。
s_res2 <- summary(res2) s_res2$test$pvalues # p値はここに入っている (この時点でsummaryの値より4桁下まで表示される) # 出力がcharacterとなるが、formatが一番簡単 format(s_res2$test$pvalues[1], digits = 15) # [1] "0.0315125323146122" # options()で表示桁数を弄っても求まる options(digits = 15) s_res2$test$pvalues[1] # [1] 0.0315125323146122 options(digits = 7) # 元に戻す
ゆう (2016-12-09 (金) 11:21:59)
お世話になります。
パイプ演算子%>%が使えません。
Error: could not find function "%>%"
のメッセージが出ます。
magrittrパッケージはインストールしたのですが、
ほかに実施することがあるのでしょうか?
※ちなみにpipeRの%>>% も同様に使えませんでした。
(pipeRパッケージはインストールしました)
初歩的な質問で恐縮ですがよろしくお願いします。
PPAP (2016-11-30 (水) 23:28:40)
よろしくお願いします。
【質問】
多変量GARCH(multivariate garch)を閾値(threshold)モデル化したもの、
つまり、M(multivariate)GARCHモデル、BEKKモデル、CCCモデル、DCCモデル等の
閾値モデル版を扱うことのできるパッケージもしくはコードを記載した
webページ等はありませんでしょうか?
(備考)
多変量時系列モデルの代表的なモデルであるVARについては、
これを閾値モデル化したTVAR(threshold-VAR)がパッケージ(tsDyn)に機能
として存在しているようですが、自分がいかに調べても、多変量GARCHで
これを閾値化したパッケージやコードが見つかりませんでした。
どなたかご存知の方はおられませんでしょうか。
どうぞよろしくお願い申し上げます。
page (2016-11-16 (水) 17:36:23)
はじめて質問させてもらいます。
よろしくお願いします。
プロフィールのテキストデータの収集について教えてください。
「twitteR」を使えば、タイムラインのツイートなどは収集できると思うのですが、プロフィールのテキストデータは収集可能でしょうか。「twitteR-CRAN」を読んだのですが、見つかりませんでした。APIの連携は済んでおります。
安倍首相のTwitterアカウントであれば「衆議院議員安倍晋三(あべしんぞう)の公式twitterです。 Prime Minister of Japan. Leader of Liberal Democratic Party.」の部分です。
もし、「twitteR」で可能であれば、使用例をお示しいただけますと幸いです。
また、違うパッケージで可能であれば、教えてくれますと幸いです。
tori (2016-11-16 (水) 17:02:56)
すみません。
Windows10(64bit)にR-3.3.2-win.exeをインストールしました。デスクトップに
できたアイコンをダブルクリックして起動したのですが(R console)、
crtl+pで一つ前に実行したコマンドを出そうとすると印刷になってしまいます。
ctrl+nもだめでした。
ヘルプの項のコンソールを見るとctrl+pとctrl+nは履歴と書いてあるのですが、
ファイルの項の印刷はctrl+pとなっており、こちらの動作をしているようです。
履歴の移動は矢印キーでもできるとはいえ、できればctrl+pとnを使いたいので
すが、設定を変更する場所が見つかりませんでした。
そこで、ctrl+pとnで履歴を移動できるようにする方法orヒントをご存じの方、
お教えください。よろしくお願いします。
PQP (2016-11-08 (火) 00:42:17)
お世話になります。
Win 7, 32bitでR 3.0.2を使用しています。
プロキシサーバーを経由する必要があるため、起動ディレクトリの.RprofileにSys.setenv(http_proxy="プロキシサーバアドレス:ポート")と記載しておき、パッケージの更新時にはアカウントを入力してインターネットに接続できていました。
しかし、R 3.3.1をインストールしてパッケージの更新をしたところ、アカウントの入力画面が表示されず以下のようなエラーメッセージが表示されました。to download mirrors file ( URL 'https://cran.r-project.org/CRAN_mirrors.csv' を開けません ); using local file 'C:/PROGRA~1/R/R-33~1.1/doc/CRAN_mirrors.csv' 警告: リポジトリー https://cran.ism.ac.jp/src/contrib に対する索引にアクセスできません : URL 'https://cran.ism.ac.jp/src/contrib/PACKAGES' を開けません 警告: リポジトリー http://www.stats.ox.ac.uk/pub/RWin/src/contrib に対する索引にアクセスできません : URL 'http://www.stats.ox.ac.uk/pub/RWin/src/contrib/PACKAGES' を開けません 警告メッセージ: download.file(url, destfile = f, quiet = TRUE) で: cannot open URL 'https://cran.r-project.org/CRAN_mirrors.csv': HTTP status was '407 Proxy Authentication Required'Sys.getenv("http_proxy") で.Rprofile通りの設定になっていることは確認できたのですが、最近のRはプロキシサーバーの設定が変更になったのでしょうか。
どのようにすればインターネットに接続できるかご教示宜しくお願いします。
TAKA? (2016-10-27 (木) 07:43:50)
詳しく書いてみました。 よろしくお願いします。library(leaflet) library(RColorBrewer) library(maptools) library(knitr) #「JPN_adm1.shp」は「http://www.gadm.org/country」から file <- "JPN_adm1.shp" # データの準備 # 緯度経度なので+projにlonglatを指定 # SpatialPolygonDataframeとして読み込み pj <- CRS("+proj=longlat +datum=WGS84") Jpn <- maptools::readShapePoly(file,proj4string = pj,IDvar="NAME_1") # データ部の下から10レコードを表示 Jpn@data %>% tail(.) %>% kable() # ポリゴン部一つ目を表示 Jpn@polygons[1] #「http://www.gadm.org/country」から取得したデータに人口密度(PD)を足したデータ # 「JPN_adm1.shp」で「Hyナ紅o」となっているのであわせた jpad <- read.table("JPN_adm1.csv", header=TRUE, sep=",", na.strings=c("", "NA"), dec=".", fill=TRUE, quote="\"", strip.white=TRUE) # 都道府県名「NAME_1」でmerge Jpn <- merge(Jpn,jpad,by="NAME_1") #今回使用する以下のものに整理 # ・ NAME_1 = 都道府県名 # ・ PD = 人口密度(人/km2) #lng,latに代表点を格納 Jpn.d<- data.frame(PREF = Jpn$NAME_1, #各小地域名称 PD = Jpn$PD) #人口密度 Jpn@data <- Jpn.d Jpn@data %>% tail(.) %>% kable(.,format="markdown") # コロプレス図( 離散化:等分法) # 人口密度を%で表示しているのは変ですがご容赦 pal_q <- leaflet::colorQuantile( palette = "Reds", domain = Jpn@data$PD, n=10) m <- leaflet::leaflet(Jpn) m %>% addProviderTiles(provider = "OpenStreetMap.BlackAndWhite") %>% addPolygons(stroke = FALSE, fillOpacity = 0.9, color = ~pal_q(Jpn.d$PD)) %>% addLegend(position='bottomright', pal=pal_q, values=~PD,title="人口密度(%)", labels=~classlabel$label)希望としては上記でできる地図と下記でできる地図を合体したい
コロプレス地図上で、地点表示をしたいdf <- data.frame( id = 1:5, lng = rnorm(5,mean=135,sd=0.5), lat = rnorm(5,mean=35,sd=0.5), pop = c("kosaki","chitoge","tsugumi","marika","yui")) m <- leaflet(df) %>% addTiles() m %>% addMarkers(lng=~lng, lat=~lat, popup=~pop, label=paste(df$lng, df$lat, sep=","))
> Jpn <- maptools::readShapePoly(file,proj4string = pj,IDvar="NAME_1") getinfo.shape(filen) でエラー: Error opening SHP file
m <- leaflet(Jpn) m %>% addProviderTiles(provider = "OpenStreetMap.BlackAndWhite") %>% addPolygons(stroke = FALSE, fillOpacity = 0.9, color = ~pal_q(Jpn@data$PD)) %>% # Jpn.d$PD を Jpn@data$PD に変更しています addLegend(position='bottomright', pal=pal_q, values=~PD,title="人口密度(%)",labels=~classlabel$label) %>% addMarkers(lng=~lng, lat=~lat, popup=~pop, label=paste(df$lng, df$lat, sep=","), data = df) ## この行を加える
TAKA? (2016-10-24 (月) 00:35:52)
前回の質問があいまいだったので、補足します。shpファイルからreadShapePoly関数で読んだデータと、緯度・経度・地点名のデータが、当然ですが並列には扱えません。前者(○○)は地図にプロットする場合leaflet::leaflet(○○)、となっていますが、後者(△△)はleaflet(△△)です。Polygonファイルと単純な緯度経度ファイルの違いだと思うのですが、後者を前者の関数の一部のような形式で扱えないのかと思っています。この質問で言っていること全体が間違っているのかもしれませんが、よろしくお願いします。
TAKA? (2016-10-23 (日) 15:52:03)
「https://book.mynavi.jp/manatee/detail/id=59406」を参考に、leafletで全国の都道府県別の人口密度のコロプレス図を描きました。希望としては、その地図に、「https://kazutan.github.io/JapanR2015/leaflet_d.html」で解説されているように、複数地点のマーカー(サークル等)を追加し、labelやpopup機能なども使用したいです。しかし、方法がわかりません。よろしくお願いします。
yoshida931 (2016-10-21 (金) 19:18:57)
x <- c(12,18,15,14,16,17,15,16,14,13,12) y <- c(9,10,12,8,11,10,8,9,12,13,11,10) var.test(x, y) 95 percent confidence interval: 0.4216858 5.4487216次の式との違いが理解できません
x <- c(12,18,15,14,16,17,15,16,14,13,12) y <- c(9,10,12,8,11,10,8,9,12,13,11,10) qf(0.05, length(x)-1, length(y)-1) qf(0.975, length(x)-1, length(y)-1) 95 percent confidence interval: 0.2728577 3.525672どうか宜しくお願いいたします
> x <- c(12,18,15,14,16,17,15,16,14,13,12) > y <- c(9,10,12,8,11,10,8,9,12,13,11,10) > a <- var(x) / var(y) > a / qf(0.025, length(x)-1, length(y)-1) [1] 5.448722 > a / qf(0.975, length(x)-1, length(y)-1) [1] 0.4216858です。
hashi (2016-10-20 (木) 12:59:23)
お世話になります。
1000000件程度のレビューデータの形態素解析を行うためにRMeCabを用いています。
一息に行うには難しいと思いましたので10000件にづつに分割してsapplyを用いることで行っているのですが、sapplyの際に時折「予期せぬエラー」が発生してR.guiが停止してしまうことがあります。
(RStudioを用いている時にはR Session Aborted と表示されます)
Rを再起動して再び走らせるとうまく走るようですが、しばらくするとまた同様にRが停止してしまいます。
Rを止めることなく、解析を行うためにはどのような対策が考えらえれますでしょうか?ご教授いただければ幸いです。
コードは以下です。> # x は10000件のレビューテキストが入っているベクトルです (サイズは2000KB程度) > for(i in 1:100){ > load(paste0("x", i, ".Rdata")) > a <- sapply(x, RMeCabC) > save(a, file=paste0("a", i, ".Rdata")) > } > > sessionInfo() R version 3.3.1 (2016-06-21) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200) locale: [1] LC_COLLATE=Japanese_Japan.932 LC_CTYPE=Japanese_Japan.932 LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C [5] LC_TIME=Japanese_Japan.932 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] RMeCab_0.99994 loaded via a namespace (and not attached): [1] tools_3.3.1なお、Rの再インストールやRMeCabの再インストール等は試してみましたが、改善はされませんでした。load, saveでは問題が生じていないことも確認しました。
どうぞよろしくお願いいたします。
まさ (2016-10-06 (木) 11:07:30)
お世話になります。
配列に関してですが、2つの配列を行列の積を求めることで1つにまとめる方法をお教えいただけないでしょうか?> a<-array(1:8,dim=c(2,2,2)) > a , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 , , 2 [,1] [,2] [1,] 5 7 [2,] 6 8 > b<-array(1:8,dim=c(2,2,2)) > b , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 , , 2 [,1] [,2] [1,] 5 7 [2,] 6 8 > c<-array(a%*%b,dim=c(2,2,2)) > c , , 1 [,1] [,2] [1,] 204 204 [2,] 204 204 , , 2 [,1] [,2] [1,] 204 204 [2,] 204 204となり、計算がうまくいきません。
どこが間違えているかご指摘よろしくお願いします!
> array(sapply(1:2, function(i) a[, , i] %*% b[, , i]), dim=c(2, 2, 2)) , , 1 [,1] [,2] [1,] 7 15 [2,] 10 22 , , 2 [,1] [,2] [1,] 67 91 [2,] 78 106
初心者 (2016-10-05 (水) 12:13:17)
いつもお世話になっております。
次のとおり回帰分析を行ったのですが、回帰直線の形状がイメージと異なるような気がします。もう少し傾いた(右上がりの45度線のような)形状になると思われるのですが、いかがでしょうか。
R二乗値は0.63あるのですが、その割にはあまりにも回帰直線が当てはまっていない気がします。a = c(-10.22308777, -17.73631427, -31.26787059, -30.0144283, 16.00892923, -0.069389969, -1.527697676, 40.23164602, 17.84427993, 51.90862367, 32.43250902, -14.69527371, -21.51305243, 2.467123024, -1.591029265, -6.002531197, -5.528871379, -20.72354649) b = c(3.89776009, -1.599860574, -4.454146619, -6.591765968, -0.790181177, 2.356401065, 0.284653276, 8.520993351, 2.143995797, 4.920336488, 2.454386261, -1.756563062, -2.934179195, -2.443421907, -0.75099722, 0.213094238, -0.430802605, -3.039698906) reg = lm(formula = a ~ b) plot(a, b) abline(reg) summary(reg)
TAKA (2016-10-05 (水) 12:07:38)
ある分布は待ち時間に関するもので、アーラン分布が予測され、ほかのプログラムでそのことが実証されています。検算の意味もあり、「R」でアーラン分布へのあてはめを実施しようと思い、調べました。
結果、fitdistrでガンマ分布へのあてはめが可能だとわかりましたが、shcapeを自然数に限定する方法がわかりません。また、fitdistrで計算させたあと、出てきたshapeの近傍の自然数に設定して、再計算をさせればいいと思ったのですが、その方法もわかりません。ご教授ください。
まさ (2016-10-03 (月) 18:36:06)
お世話になります。
行列の各要素にそれぞれベクトルを挿入して配列を作るにはどうしたらよろしいのでしょうか?
例えば、a<-c(1,2,3,4,5) b<-c(6,7,8,9,10) c<-c(11,12,13,14,15) d<-c(16,17,18,19,20)というベクトルを使って、
[1] | 1 11 | | 6 16 | [2] | 2 12 | | 7 17 |といった感じで作っていきたいのですが、、、、
R言語だけでなくプログラミングに対する知識も浅いので、丁寧にご説明いただけると光栄です。
なにとぞよろしくお願いします。
lapply(data.frame(rbind(a, b, c, d)), matrix, nrow=2)
Hiro (2016-09-28 (水) 15:06:05)
お世話になります。
R3.1.0を使用して医療統計を行い、日本の雑誌に論文を投稿したところ、「統計解析ソフトRの解析能力について、ソフトとしての脆弱性、信頼性の問題について考察し、参考文献を追記してください。」とのコメントがございました。
これまで、海外への投稿論文でそのようなことを指摘されたことがありませんでしたし、あたりまえに使用していましたので、どのように回答してよいのか悩んでおります。
統計的なことでなくて申し訳ないのですが、脆弱性や信頼性に関してどのように回答するのが適切でしょうか?
Piro (2016-09-23 (金) 14:28:02)
いつもお世話になっております。
対数正規分布のグラフを作成しようとしているのですが、polygon関数で一部を塗りつぶそうとしても、うまく描画できません。
使用環境はR version 3.3.1 です。
data<-c(94.257,54.921,60.819,60.666,105.699,42.525,117.238,42.733,53.808,47.220, 50.901,41.801,44.790,38.811,60.793,39.692,38.387,45.992,69.380,40.316,41.333, 55.521,72.151,80.017,64.362,113.580,131.497,43.741,44.435,81.991,53.107,58.892, 45.898,45.947,73.002,83.237,64.322,57.769,69.487,54.550) curve(dlnorm(x,meanlog=mean(log(data)),sdlog=sd(log(data))),0,150) xvals=seq(0,39.391,length=40) dvals=dnorm(xvals) polygon(c(xvals,rev(xvals)),c(rep(0,40),rev(dvals)),col="grey") #重ならない
kei (2016-08-30 (火) 05:31:12)
いつもお世話になります。
magrittrパッケージを使って複数の関数にパイプしたいと思っていますが、結果がコンソールに表示される場合とされない場合があるように思われます。debug(`%>%`)などでデバッグを試みたのですが、%>%の中身は現在の私には難しすぎて理解しきれません。# str()とsummary()の結果がコンソールに表示される⇒問題なし~ iris %>% { str(.) summary(.) } # str()の結果はコンソールに表示されるがsummary()の結果が表示されない⇒疑問点~ iris %>% { summary(.) str(.) } # print()でコンソール出力を明示すると表示される iris %>% { print(summary(.)) print(str(.)) } # 関数は動いているようで、以下の場合は変数が読み込まれます。 iris %>% { x <<- summary(.) y <<- str(.) }この点について原因や考え方をご存知の方がいらっしゃいましたらアドバイスをお願いします。
よろしくお願いします。
> {1; 3; 5} # 数値も「式」である [1] 5 > {1; sqrt(3); invisible()} > 【何も表示されない】summary() の戻り値はその結果であるが,str( ) の戻り値は 「NULL」str does not return anything であり,コンソールに表示しているのは print() によるものではない。
yu (2016-08-23 (火) 20:44:26)
いつもお世話になります。
rpartのpredictで出力される確率を自分で編集したいと思っています。
rpartのドキュメントを見て、
$frame$dev
などを変更してみたのですが、predictの結果には寄与していないようです。
どなたか、predict結果に任意の確率を出力する方法をご存知の方はいませんでしょうか。
> library(rpart) > head(kyphosis) Kyphosis Age Number Start 1 absent 71 3 5 2 absent 158 3 14 3 present 128 4 5 4 absent 2 5 1 5 absent 1 4 15 6 absent 1 2 16 > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > head(predict(fit)) absent present 1 0.4210526 0.5789474 2 0.8571429 0.1428571 3 0.4210526 0.5789474 4 0.4210526 0.5789474 5 1.0000000 0.0000000 6 1.0000000 0.0000000 > newdata <- read.table(text=" Kyphosis Age Number Start + present 42 7 6 + present 35 9 7 + absent 100 3 14 + absent 125 2 11 + absent 1 4 15", header=TRUE) > newdata Kyphosis Age Number Start 1 present 42 7 6 2 present 35 9 7 3 absent 100 3 14 4 absent 125 2 11 5 absent 1 4 15 > predict(fit, newdata=newdata) absent present 1 0.4210526 0.5789474 2 0.4210526 0.5789474 3 0.4285714 0.5714286 4 0.8571429 0.1428571 5 1.0000000 0.0000000
> fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > newdata Kyphosis Age Number Start 1 present 42 7 6 2 absent 35 9 7 3 absent 100 3 14 4 absent 125 2 11 5 absent 1 4 15 > predict(fit, newdata=newdata) absent present 1 1.0000000 0.0000000 2 1.0000000 0.0000000 3 1.0000000 0.0000000 4 1.0000000 0.0000000 5 1.0000000 0.0000000 # あれ、absent 100%の結果だったのにpresentが混ざっている。100%を80%にしたいな > fit$frame$n[3] = 20 > fit$frame$dev[3] = 16 > predict(fit, newdata=newdata) absent present 1 1.0000000 0.0000000 2 1.0000000 0.0000000 3 1.0000000 0.0000000 4 1.0000000 0.0000000 5 1.0000000 0.0000000 # 何も変わってない・・・ > xxxxxxxxxxxを実行 absent present 1 0.8000000 0.2000000 2 0.8000000 0.2000000 3 0.8000000 0.2000000 4 0.8000000 0.2000000 5 0.8000000 0.2000000 # できたー
michael (2016-08-11 (木) 21:31:03)
初めて書き込ませていただいています。Rの全くの初心者です。
大学院の研究で使用しているデータの処理をRで行おうとして四苦八苦しています。ある時間軸に対して変化するデータをガンマ分布へのフィッティングを試みています。まず一般化線形モデル:glm関数を用いてガンマ分布へのFittingを試みましたがうまくいきませんでした。そこでnls関数を用いてガンマ分布の関数式へFittingを行うと良好なFittingを得られました。ただできればglm関数を用いたいと思っています。glm関数でうまくいかない原因と解決点をいただけましたらとても有難いです。よろしくお願いいたします。
使用環境は
R version 3.3.1 (2016-06-21)です。
nlsでの解析は以下の通りです。# 観測値(時間) sec <- c(0, 2, 4, 6, 8.1, 10.1, 13.2, 16.2, 19.3, 22.3, 60.3) # 観測値(結果) hu <- c(0.7, 0.3, 47.7, 149.3, 195.8, 243.5, 236.9, 141, 81.2, 59.2, 67.0) # 観測値のプロット plot(sec, hu) # Fitting したいデータ選択 x <- sec[2:10] y <- hu[2:10] model = (y~x) # 非線形回帰 result <- nls(y ~ (c*x^(a)*exp(-x/b)/gamma(a+1)), start = c(a=2, b=10, c=1),trace=TRUE) # 結果のサマリー summary(result) coefficients(result) # 係数の取り出し coe <- result$m$getPars() # 係数取り出しの確認(1,2,3 が abc に相当) coe[1] #近似曲線の作成 t <- seq(0, 60) z <- coe[3]*t^(coe[1])*exp(-t/coe[2])/gamma(coe[1]+1) lines(t, z)一方でGLM関数を用いて
sec <- c(0, 2, 4, 6, 8.1, 10.1, 13.2, 16.2, 19.3, 22.3, 60.3) hu <- c(0.7, 0.3, 47.7, 149.3, 195.8, 243.5, 236.9, 141, 81.2, 59.2, 67.0) plot(sec, hu, ylim=c(0, 1000)) sec.pos<- sec[2:10] hu.pos<- hu[2:10] glm.hu <- glm(hu.pos~sec.pos, family = Gamma) glm.hu$coefficients x <- seq(0, 60) eta.pred <- glm.hu$coefficients["(Intercept)"]+glm.hu$coefficients["sec.pos"]*x hu.pred <- 1/eta.pred 1/summary(glm.hu)$dispersion library("MASS") a <- gamma.shape(glm.hu)$alpha a s.hu.pred <- 1/eta.pred/a lines (x, hu.pred)とした場合には綺麗なFittingを得ることができません。
# A Gamma example, from McCullagh & Nelder (1989, pp. 300-2) > clotting <- data.frame( + u = c(5,10,15,20,30,40,60,80,100), + lot1 = c(118,58,42,35,27,25,21,19,18)) > ans <- glm(lot1 ~ log(u), data = clotting, family = Gamma) > summary(ans) Call: glm(formula = lot1 ~ log(u), family = Gamma, data = clotting) 略 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.0165544 0.0009275 -17.85 4.28e-07 log(u) 0.0153431 0.0004150 36.98 2.75e-09 (Dispersion parameter for Gamma family taken to be 0.002446059) Null deviance: 3.51283 on 8 degrees of freedom Residual deviance: 0.01673 on 7 degrees of freedom AIC: 37.99 Number of Fisher Scoring iterations: 3 > plot(lot1 ~ log(u), data=clotting) > lines(fitted(ans) ~ log(clotting$u), type="b", pch=19)ガンマ分布のパラメータなんか予測してないでしょう?別ものだということがわかるでしょう。
べのたみ (2016-08-11 (木) 08:58:32)
http://elsur.jpn.org/ck/#intro
の説明と置いてくださっているソースコードを見ながら状態空間の勉強中です。
9章のパケージKFASを使用する部分で、exercise.Chapter9.4a のソースコードを使っても、
行列Hの値などが出力結果として示されているものと桁が異なる値が出てきます。
9.4bのソースコードを使った値は表示されているものとほぼ同じ値が出ます。
原因と解決策につながるヒントがいただけたら嬉しいです。
使用環境は以下の通りです
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
other attached packages:[1] KFAS_1.2.3 dlm_1.1-4
すみこ (2016-08-07 (日) 05:45:14)
R を起動させるたびに
par(las=1)
をしているのですが、それを自動に行う方法はありますか?
あるいはデフォルトを恒久的に変えられますか?
library(survival) cat('Welcome!', '\n') a <- 10 plot(rnorm(10))このうち最初の3つはちゃんと走るのですが、Error: could not find function "plot" と出ます。plot() だけではなくて、rnorm(), par() も could not find function のエラーが出ます。何か間違っているのでしょうか? 私のOSは Mac10.11 El Capitan で R version 3.3.1 を使用しています。引き続きよろしくお願いします。立ち上げた時はこう出ます。 -- すみこ 2016-08-09 (火) 04:22:35
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair" Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin13.4.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. Welcome! Error: could not find function "plot" [R.app GUI 1.68 (7238) x86_64-apple-darwin13.4.0] [Workspace restored from /Users/tatsukikoyama/.RData] [History restored from /Users/tatsukikoyama/.Rapp.history] > a [1] 10
library(survival) cat('Welcome!', '\n') a <- 10 library(graphics) library(stats) plot(rnorm(10))その他,sessionInfo() で表示されるパッケージ(base など)に含まれる関数を利用したいときも同じです。 -- 河童の屁は,河童にあらず,屁である。 2016-08-09 (火) 06:49:06
attached base packages: [1] grDevices utils datasets stats graphics methods base other attached packages: [1] survival_2.39-5 loaded via a namespace (and not attached): [1] Matrix_1.2-6 splines_3.3.1 grid_3.3.1 lattice_0.20-33
setHook("plot.new", function() par(las=1))この場合は,library(graphics) や library(stats) は不要です。 -- 河童の屁は,河童にあらず,屁である。 2016-08-09 (火) 22:32:04
ゴヤンキー (2016-08-02 (火) 13:43:13)
初めての投稿です。
よろしくお願いいたします。店舗名 3分 5分 7分 aaa 16,347 47,412 89,237 bbb 3,047 10,191 30,263 ccc 5,974 20,824 50,549 ddd 8,852 26,060 48,916といったデータをクラスタ分類するときに、実行結果にaaa、bbb等の名前をつけることができず、番号が振られてしまいます。
何か方法はございますでしょうか?
csvファイルからデータ読み込みしております。
> d = data.frame(name=letters[1:5], x=rnorm(5), y=rnorm(5)) > plot(hclust(dist(d[,2:3])), labels=d$name)
> a <- read.table(text="店舗名 3分 5分 7分 + aaa 16,347 47,412 89,237 + bbb 3,047 10,191 30,263 + ccc 5,974 20,824 50,549 + ddd 8,852 26,060 48,916", header = TRUE) > a[,2:4] <- lapply(a[,2:4],function(x){as.numeric(gsub(",", "", x))}) > a 店舗名 X3分 X5分 X7分 1 aaa 16347 47412 89237 2 bbb 3047 10191 30263 3 ccc 5974 20824 50549 4 ddd 8852 26060 48916 > dist(a[, 2:4]) 1 2 3 2 70994.55 3 48075.80 23090.04 4 46237.06 25168.58 6193.97行名が1,2,3になっているのをaaa,bbb,cccに変更します。
> row.names(a) <- a[,1] > a 店舗名 X3分 X5分 X7分 aaa aaa 16347 47412 89237 bbb bbb 3047 10191 30263 ccc ccc 5974 20824 50549 ddd ddd 8852 26060 48916 > dist(a[, 2:4]) aaa bbb ccc bbb 70994.55 ccc 48075.80 23090.04 ddd 46237.06 25168.58 6193.97
> # "," は read.table に渡す前に削除しておく > a <- read.table(text=gsub(",", "", "店舗名 3分 5分 7分 + aaa 16,347 47,412 89,237 + bbb 3,047 10,191 30,263 + ccc 5,974 20,824 50,549 + ddd 8,852 26,060 48,916"), header = TRUE, row.names=1) > a X3分 X5分 X7分 aaa 16347 47412 89237 bbb 3047 10191 30263 ccc 5974 20824 50549 ddd 8852 26060 48916
ロペ (2016-08-01 (月) 11:35:57)
お世話になります。x <- 13 1:xのようなベクトルがあった時に、長さ5で分割して
1 2 3 4 5 6 7 8 9 10 11 12 13のようなリストを作りたいのですが、良い方法はありますでしょうか。xは状況によって変化します。
宜しくお願いします。
> matrix(c(1:x, rep(NA, 5 - (x %% 5))), ncol = 5, byrow = TRUE) [,1] [,2] [,3] [,4] [,5] [1,] 1 2 3 4 5 [2,] 6 7 8 9 10 [3,] 11 12 13 NA NA要素数が5の倍数でないと行列が作れないので、足りない分をNAで埋めています。 もし、「リスト」がRのリストという意味なら、
> a <- list() > for(i in 1:((x %/% 5) + 1)) a[[i]] <- (1:x)[((i-1)*5+1):((i-1)*5+5)] > a [[1]] [1] 1 2 3 4 5 [[2]] [1] 6 7 8 9 10 [[3]] [1] 11 12 13 NA NAというのはいかがでしょうか。また、別解として、split()を使えば下記のようにリストになります。
> suppressWarnings(split(1:x, gl(x %/% 5 + 1, 5))) $`1` [1] 1 2 3 4 5 $`2` [1] 6 7 8 9 10 $`3` [1] 11 12 13
ひい (2016-07-28 (木) 17:16:22)
heatmap()を用いてヒートマップ図を描いています。以下のようにすると行方向の要素数が縦方向の要素数より多いため、文字がつぶれてしまいます。data <- as.matrix(read.table("http://stat.biopapyrus.net/data/arraydata.txt", header=TRUE)) heatmap(data)引数cexRowで文字サイズを小さくするのではなく、heatmap図を縦方向に引き伸ばしたいのですが、どのようにすればよいでしょうか。
環境はWindows 7、R 3.3.1です。どなたかご助言を宜しくお願いします。
library(gplots) heatmap.2(data, trace="none", key=F, lhei=c(1,6), margin=c(3,4))あたりでしょうか。あとは出力先をのばせばのびます。 -- 通りすがり 2016-08-01 (月) 22:12:15
t^2 (2016-07-23 (土) 10:18:05)
初めて投稿します。よろしくお願いします。
latticeライブラリーのqqmath()を使用しています。
以下のようにすると、横軸qnorm, 縦軸xになります。
横軸x, 縦軸qnormで描きたいのですが、方法はありますか?
例:library(lattice) df <- data.frame(label=rep("A",200),x=rnorm(200)) df <- rbind(df, data.frame(label=rep("B",200),x=rnorm(200)*2)) df <- rbind(df, data.frame(label=rep("C",200),x=rnorm(200)*3)) gr <- qqmath(~x|label,data=df) print(gr)環境は以下です。
R version 3.2.2 (2015-08-14) Platform: i386-w64-mingw32/i386 (32-bit) Running under: Windows 8 (build 9200) other attached packages: [1] lattice_0.20-33よろしくお願いします。
df2 <- NULL lab <- levels(df$label) for(i in 1:length(lab)) { temp <- qqnorm(df[df$label==lab[i], "x"], plot.it=F) df2 <- rbind(df2, as.data.frame(temp)) } df2 <- data.frame(qnorm = df2$x, x = df2$y, label = df$label) gr_rev <- xyplot(qnorm ~ x | label, data = df2)
df2 <- NULL lab <- levels(df$label) for(i in 1:length(lab)) { temp <- qqnorm(sort(df[df$label==lab[i], "x"]), plot.it=F) df2 <- rbind(df2, as.data.frame(temp)) } df2 <- data.frame(qnorm = df2$x, x = df2$y, label = df$label) gr_rev <- xyplot(qnorm ~ x | label, data = df2, type = c("b", "r"))
こやP (2016-07-08 (金) 15:23:01)
R初心者です。よろしくお願いします。
plot関数ではaxis関数と組み合わせて使用して軸の目盛を任意で変更することが出来るようです。
persp関数を使った作図で軸の目盛を自由に変更したいのですが方法はありますか?
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
よろしくお願いいたします。
## デモデータ y <- x <- seq(-10, 10, length= 30) f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } z <- outer(x, y, f) z[is.na(z)] <- 1 ## 描画 p <- persp(x, y, z, theta = 50, phi = 30, expand = .3, col = "lightblue", axes = FALSE) xa <- trans3d(pretty(x, n = 5), rep(min(y), 5) - .5, rep(min(z), 5), p) text(xa, LETTERS[1:5]) ya <- trans3d(rep(max(x), 12) + .2, seq(min(y), max(y), length.out = 12), rep(min(z), 12), p) text(ya, month.name, adj = 0, xpd = TRUE) za <- trans3d(rep(min(x), 3), rep(min(y), 3) - .2, (0:2)*4, p) text(za, c("low", "middle", "high"), adj = 1, xpd = TRUE)
R初心者 (2016-07-02 (土) 18:36:05)
R初心者です.どうぞ宜しくお願い致します.
下記のエラーを消せないのですが,どこを修正すると良いのでしょうか?Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : ~ arguments imply differing number of rows:
Rに困った人 (2016-06-29 (水) 20:54:30)
R初心者です.どうぞよろしくお願いいたします.
subset(x,条件式)を使って,階層ごとにデータ整理をしたいと考えております.
条件式にて,「x$area=="A市"」のようにすれば良いとは思うのですが,A市,B市,・・・Z市のように市区町村の数がたくさんあるので,何度も同じ作業をするのは厳しい状況です.何か良い方法はないでしょうか?
さぶ (2016-06-09 (木) 11:14:33)
以下のような日本語と半角英数字の混在した文字列から、日本語を除去して半角英数字のみの文字列を作成したいのですが、どのような処理をすれば宜しいでしょうか。
"12wあsxいdr5日本6tgbhnuん89iko"
gsubで日本語のみを空文字に置換すればよいと考えたのですが、日本語を表す正規表現がないため実行できませんでした。
環境はWindows 7の32bit、R 3.3.0です。
お手数ですが、ご助言宜しくお願いします。
For example, [[:alnum:]] means [0-9A-Za-z], ...だから,半角英数以外は [^[:alnum:]] なんですよ。よくわからないものを使うより,基本的な [^A-Za-z0-9] を使えば間違いが少ないですね。 -- 2016-06-09 (木) 15:14:12
> gsub("[^[:alnum:]]","","12wあsxいdr5日本6tgbhnuん89iko") [1] "12wsxdr56tgbhnu89iko" > gsub("[^A-Za-z0-9]","","12wあsxいdr5日本6tgbhnuん89iko") [1] "12wsxdr56tgbhnu89iko" > gsub("[ぁ-嶲]","","12wあsxいdr5日本6tgbhnuん89iko") # Unicode なら,これでもよいかも [1] "12wsxdr56tgbhnu89iko"
X (2016-06-08 (水) 17:08:46)
以下のようにパスワードでロックのかかったエクセルファイルを読み込みたいのですが、当然ながらエラーになってしまいます。library(xlsx) read.xlsx("file.xlsx", 1, header=T, encoding="UTF-8") .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, でエラー: org.apache.poi.EncryptedDocumentException: The supplied spreadsheet seems to be an Encrypted .xlsx file. It must be decrypted before use by XSSF, it cannot be used by HSSFRでパスワードを入力して読み込む方法があればご教示頂けますか。
宜しくお願いします。
三回生 (2016-06-07 (火) 01:02:04)
大学三回生です。R初心者です。よろしくお願いします。
大学の授業で、データフレームを操作する課題がだされました。
内容は、21行(テキストデータ)1列のxxxx.csv(1行目は変数名)を読み込み、各行ごとにテキストファイルに書き出し、txtデータを20個分、保存するという課題です。
以下のように記述してみたものの、うまくいきません。xxxx <-read.csv("xxxx.csv", header = TRUE) n <- 1:20 for (i in 1:n) { file.name <- sprintf("text_%02d.txt", i) dat[i] <- xxxx[i,] write.csv(dat[i], "file.name") }どこが問題で、どのように修正するべきかを教えていただけますと幸いです。
よろしくお願いします。
> 1:n [1] 1 警告メッセージ: 1:n で: 数値式は 20 個の要素を持っています: 最初の要素だけが使われました1つ1つ段階的に確認していけば、この時点で既に間違っていることに気づくでしょう。他にも、間違いがてんこ盛りです。1つ1つ潰していきましょう。
n <- 5 for (i in 1:n) { # i は 1, 2 が順次代入される x[i] <- xxxx[i,1] file.name[i] <- sprintf("text%03d.txt", i) write(x[i], file = "file.name[i]", ncolumns = 1) }
> file.name <- character() #次の行をいきなり実行するとエラーが出るのでとりあえずfile.nameを作成 > file.name[1] <- "text001.txt" # i=1の場合を実行 > "file.name[1]" [1] "file.name[1]" > file.name[1] [1] "text001.txt"
SATO (2016-06-05 (日) 01:02:47)
R3.3.0でggplot2を使っています.図をシンプル(X軸とY軸のみ表示で,補助メモリも無し)にするためtheme_classic()を使うのですが,X,Y軸共に表示されません.以前に,ggthemesというパッケージをインストールしてからこのような症状が出始めたように感じています.また,R3.1.2やR3.0を使っていた時は問題なく使えていたのですが,どなたか解決方法をご存知の方は教えていただけないでしょうか.
さかなねこ (2016-05-24 (火) 04:56:38)
ggplot2の戻り値,返り値の参照方法について教えてください
たとえば,baseのhist関数だと描画後に返り値を参照して別のことに使いまわすことができますが,ggplot2でも同じようなことができるのでしょうか。> h2 <- hist(iris[,1], seq(0,10,1)) > names(h2) [1] "breaks" "counts" "density" "mids" "xname" "equidist" > str(h2) List of 6 $ breaks : num [1:11] 0 1 2 3 4 5 6 7 8 9 ... $ counts : int [1:10] 0 0 0 0 32 57 49 12 0 0 $ density : num [1:10] 0 0 0 0 0.213 ... $ mids : num [1:10] 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 $ xname : chr "iris[, 1]" $ equidist: logi TRUE - attr(*, "class")= chr "histogram"となり,度数を取り出して別途表にすることなどができますが,ggplotだと,
> g <- ggplot( iris, aes(x=Sepal.Length)) > g <- g + geom_bar(stat ="bin") > plot(g) stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. > names(g) [1] "data" "layers" "scales" "mapping" "theme" [6] "coordinates" "facet" "plot_env" "labels"となり,度数データがどこにあるのかわかりません。
ggplotで作ったグラフの数値データ(返り値,戻り値)はどこに格納されているのかご存知の方教えていただけないでしょうか。
下記サイトによれば,どこかにしまわれているように思えるのですがわかりませんでした
https://github.com/hadley/ggplot2-book/blob/master/layers.rmd#generated-variables
> a <- plot(g) > a$data[[1]]$count [1] 4 1 4 2 11 10 9 4 7 7 6 8 7 9 6 4 9 12 2 8 3 5 1 3 1 1 [27] 1 4 0 1
yu (2016-05-18 (水) 23:01:45)
rpartで学習した結果のモデルを保存したいのですがその方法がわからず、記載されているページもなかったのでご教授頂きたく思います。
例えば下記のようにしても、エラーが出て保存することができません。
また可能でしたらモデルを読み込んで使用する方法もご教授いただけたらと思います。ct <- rpart(answer ~ hit + num, method = "class" , control=rpart.control(minsplit=5, cp=0.003, loss=matrix(c(0,1,4,0), byrow=TRUE, nrow=2))) rpart.plot(ct, type = 1, uniform = TRUE, extra = 1, under = 1, faclen = 0) write(data.frame(ct), "c:\\rdata\\tree.txt")
初心者 (2016-05-09 (月) 23:21:04)
以下の手順でmecab-ipadic-NEologdのインストールをおこないました。1. git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git 2. cd mecab-ipadic-neologd 3. ./bin/install-mecab-ipadic-neologd -n3.の手順を実行したあとに以下のような記述が表示されましたので、
mecab-ipadic-NEologdのインストールが成功したものだと思っていました。
(浅学で申し訳ないのですが、okがたくさん出ておりましので成功だと考えました。)[install-mecab-ipadic-NEologd] : Start.. [install-mecab-ipadic-NEologd] : Check the existance of libraries [install-mecab-ipadic-NEologd] : find => ok : 【途中省略】 [install-mecab-ipadic-NEologd] : diff => ok [install-mecab-ipadic-NEologd] : tar => ok [install-mecab-ipadic-NEologd] : unxz is not found.そして公式にあるように以下の文言を実行しましたが、エラーが表示されました。
echo "10日放送の 【途中省略】 一幕があった。" | mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/mecab-ipadic-neologd/dicrcどうすればこの問題を解決できますでしょうか。ご教授いただければ幸いです。
初心者 (2016-05-08 (日) 19:00:31)
RMeCabでテキストマイニングを行っています。解析結果で文字が正しく解析されていないので、MeCabの辞書に単語を追加しようと思っていますが、全くうまく行きません。ご教授願います。
環境は以下の通りです。
Mac10.10.5
R studio 0.99.489
R version 3.2.2
mecab-0.996
mecab-ipadic-2.7.0-20070801
http://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html
http://r-kurain.hatenablog.com/entry/20120725/1343226646
http://www.inabalab.net/yokoyama/statics/r%E3%81%A7%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B02/
上記のサイトにあるように、以下のフォーマットに沿ってwords.csvという名前でcsv形式(UTF-8)を作成しました。
そして、ターミナルから以下のコマンドを実行したところ、()内のエラーが表示されてしまい、ここから先に一向に進めません。
$/usr/local/Cellar/mecab/0.98/libexec/mecab/mecab-dict-index -d /usr/local/Cellar/mecab/0.98/lib/mecab/dic/ipadic -u words.dic -f utf8 -t utf8 words.csv
(-bash: $/usr/local/Cellar/mecab/0.98/libexec/mecab/mecab-dict-index: No such file or directory)
or
$/usr/local/libexec/mecab/mecab-dict-index -d/usr/local/lib/mecab/dic/ipadic -u words.dic -f euc-jp -t euc-jp words.csv
(-bash: $/usr/local/libexec/mecab/mecab-dict-index: No such file or directory)
このようなエラーが表示された場合、どのようにすれば単語を追加できますでしょうか。
よろしくお願いします。
また、アンインストールしようとしても()内のエラーが表示され実行できませんでした。
cd ~/Downloads
cd mecab-ipadic-2.7.0-20070801
sudo make uninstall
(make: *** No rule to make target `uninstall'. Stop.)
cd ~/Downloads
cd mecab-0.996
sudo make uninstall
(make: *** No rule to make target `uninstall'. Stop.)
しょうもない初心者 (2016-05-05 (木) 18:04:30)
書き込みが少々気が引けますが、本を買って読み始めたばかりの超初心者です。
これまでエクセル表の上だけで、何とかマクロを使ってデータ分析を行って来ましたが、Rの持つ時系列データの分析機能を試してみたく、質問をさせて頂きます。
データはデマンド計1年分の横軸時刻、縦軸日付で、下記の様な構造をしています。
文字列でアップすると見ず(づ)らいのですが、横が48列、縦が365行の17,520個のデータです。日付\時刻 0:30 1:00 1:30 2:00 2:30 3:00 3:30 … 23:30 0:00 (→計48列) 2015/7/1 51.3 49.8 52.0 51.7 62.2 70.5 88.6 … 156.1 148.2 2015/7/2 64.3 60.0 57.4 58.8 64.5 70.5 84.3 … 204.2 211.9 … 2016/6/29 42.3 44.4 50.2 63.4 87.5 99.0 105.6 … 253.0 244.1 2016/6/30 52.8 73.5 70.9 82.5 88.4 82.3 120.3 … 324.4 318.2 (↓計365行)このデータをcsv形式で保存して、read.csvで読み込もうと色々と試したのですが、plot.ts等でプロットしようとしても受け付けられず、入力がうまくいっていない様です。
日付と時間との1:1データですので、下記の様な2列のデータに直せばうまくゆきそうな感じもしますが、もし上記のまま上手く読み込む方法がありそうでしたら、アドバイスをお願い致します。Date-Time Demand 2015/07/01-00:30:00 51.3 2015/07/01-01:00:00 49.8 … 2016/06/30-23:30:00 324.4 2016/06/30-00:00:00 318.2
startdate<-as.POSIXlt("2016-04-01") enddate<-as.POSIXlt("2016-06-30") date_range<-seq(startdate,enddate,by="1 day") repeats<-48 repeated_dates<-as.POSIXlt(as.character(NULL)) tmp<-as.POSIXlt(as.character(NULL)) for (i in 1:length(date_range)){ tmp<-rep(date_range[i],repeats) repeated_dates<-c(repeated_dates,tmp) }
startdate <- as.POSIXlt("2016-04-01") enddate <- as.POSIXlt("2016-06-30") date_range <- seq(startdate,enddate,by="1 day") repeats <- 48 repeated_dates <- rep(date_range, each=repeats) # この一行だけだ爆速だし。 -- 河童の屁は,河童にあらず,屁である。 2016-05-06 (金) 17:45:22
(2016-04-04 (月) 12:56:10)
Rcppを使ってRとC++の連携(下記1-3)を行いたいと思っています。
1.RからC++へ2つの行列を渡す
2.2つの行列を元に特定処理を実行し、3次元配列を作成
3.2で作成した3次元配列をRに返す
3の方法が分からず、、、もしよければ助言いただけないでしょうか
具体的には下記コードで定義したfuncmatの戻り値の型として何を指定すれば
3次元配列を返すことができるのでしょうか?
====下記Rコード====library( Rcpp ) library( RcppArmadillo ) test <-' #include <RcppArmadillo.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp; // [[Rcpp::export]] Type funcmat(NumericMatrix A, NumericMatrix B) { int XXXX[10][20][30]; //行列A、Bに関する処理をXXXXに代入 return (XXXX); } ' sourceCpp(code=test) a <- matrix(1:100,10) b <- matrix(2:101,10) c <- funcmat(a,b)
- 素直に最初から最後までを C++ で書くことをお勧めします。そのほうが早いし,C++ で全部書けることを前提とした Cpp だと思うわけですよ。C++ で書けないのに R を介すれば書けるんじゃないかというのは,幻想じゃないか?本末転倒。 -- 河童の屁は,河童にあらず,屁である。 2016-04-04 (月) 19:45:21
初学者 (2016-04-01 (金) 21:35:40)
column_name <- function(name, ...) {
paste0(name, "[", paste(..., sep = ","), "]") }
上記のfunction(name, ...)の...はどのような役割があるのでしょうか。
また、2行目のpaste0()内は何をどうしようとしているのでしょうか。
よろしくお願いします。
paste (..., sep = " ", collapse = NULL) paste0(..., collapse = NULL)昔はなかった(paste を使っていた)。近年になってから定義されました。 -- 2016-04-02 (土) 10:11:33
Rに困ったさん (2016-03-21 (月) 00:27:54)
例としまして,下記のようなデータがあるとします.ID year distance density pattern 1 2010 20000 1000 move1 1 2011 25000 2000 move1 2 2010 15000 2000 move2 2 2011 12000 1000 move2縦軸がdistance,横軸がdensityのグラフを作成します.
IDが1の前年(2010)と本年(2011)をプロットし,2点を線で結びたいです.
IDが2も同様にします.
IDが1とIDが2のデータは同じグラフ上に示したいです.
さらに,patternがmove1とmove2で色分けできると嬉しいです.
R初心者です.Rでの表現方法をご存知の方がいましたら,ご教示して頂けると助かります.
d <- read.table("data0321.R", header=TRUE) f <- split(d, d$ID) plot(d$density, d$distance, type="n") junk <- sapply(f, function(x) lines(x$density, x$distance, col=as.integer(x$pattern)))
もち (2016-03-15 (火) 10:04:14)
ICCパッケージを以前使用した時は問題無く計算できていたのですが、最近あらためて使用してみるとエラーが帰ってきました。
何か情報をお持ちの方がいらっしゃったらお教え下さい。> library(ICC) > data(ChickWeight) > ICCbare(Chick, weight, data = ChickWeight) aggregate(y ~ x, data = tdata, FUN = length) でエラー: 使われていない引数 (data = tdata, FUN = length) ICC version 2.3.0 R version 3.2.4 (2016-03-10) Platform: x86_64-apple-darwin13.4.0 (64-bit) Running under: OS X 10.11.3 (El Capitan)
たく (2016-03-14 (月) 13:53:15)
お世話になります。read.tableでファイルを読む際に、元のファイルが2つの改行コードが混じっているようなので、どちらの改行も改行として読みたいと思います。文字コード自体を変えてしまうとどちらかしか読んでくれないようですしUTF-8の日本語も中に交じっているのですが、どのような方法がありますでしょうか。
a <- list(0) a[[2]] <- c(1:5) func1 <- function(x){rbind(matrix(x,ncol=1))} do.call(func1, a)forで書けなくもないですが-- たく 2016-03-15 (火) 16:04:01
さくら (2016-03-12 (土) 17:46:42)
漸化式を計算して,
結果を順番に示す方法を教えてください.
例えば,
Vn+1=2*Vn+3*Vn で初期値を 0.5 にします.
お願いします.
> n = 10 > # ベクトルとして保存したいなら > a = numeric(n+1) > a[1] = 0.5 > for (i in 1:n) { + a[i+1] = 2*a[i] + 5*a[i]^3 + } > a [1] 5.000000e-01 1.625000e+00 2.470508e+01 7.544201e+04 2.146890e+15 4.947651e+46 6.055741e+140 [8] Inf Inf Inf Inf > # 単に表示するだけなら > v1 =0.5 > for (i in 1:(n+1)) { + print(v1) + v2 = 2*v1 + 5*v1^3 + v1 = v2 + } [1] 0.5 [1] 1.625 [1] 24.70508 [1] 75442.01 [1] 2.14689e+15 [1] 4.947651e+46 [1] 6.055741e+140 [1] Inf [1] Inf [1] Inf [1] Inf
> # 有理数型 > library(gmp) > n <- 10 > a<-rep(as.bigq(0),n+1) # n+1の配列(実体はリスト)確保 > a[[1]]<-.5 > for (i in 1:n) {a[[i+1]] = 2*a[[i]] + 5*a[[i]]^3} > a[1:5] # 長いので1:5まで Big Rational ('bigq') object of length 5: [1] 1/2 [2] 13/8 [3] 12649/512 [4] 10125654696157/134217728 [5] 5190860329874751989362836598824695980441/2417851639229258349412352ちょっと[[のところがトリッキーかもしれません
> # 多倍長 > library(Rmpfr) > n <- 10 > prec <- 512 # 2進数での有効桁数 > floor(log10(2^prec)) # 10進数での有効桁数の確認 [1] 154 > a<-rep(mpfr(0,prec),n+1) # n+1の配列確保 > a[1]<-".5" # 文字列にするのは.3などの場合,一旦doubleの > # 精度にパーサー上で落ちてしまうので文字列 > # として与える > for (i in 1:n) {a[i+1] = 2*a[i] + 5*a[i]^3} > a[1:4] # 長いので4まで 4 'mpfr' numbers of precision 512 bits [1] 0.5 1.625 [3] 24.705078125 75442.006410337984561920166015625どちらも項内に多倍長のクラスがあるのでなんですが, doubleで演算しないように注意は必要です.
sem (2016-03-10 (木) 11:13:06)
パッケージ sem を使おうとすると,以下のようなエラーメッセージが出ます> library(sem) Error : .onLoad は loadNamespace()('tcltk' に対する)の中で失敗しました、詳細は: call: dyn.load(file, DLLpath = DLLpath, ...) error: 共有ライブラリ '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/tcltk/libs/tcltk.so' を読み込めません: dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/tcltk/libs/tcltk.so, 10): Library not loaded: /usr/X11/lib/libXft.2.dylib Referenced from: /usr/local/lib/libtk8.6.dylib Reason: image not found エラー: ‘sem’ に対するパッケージもしくは名前空間のロードが失敗しましたなお,tcltk.so は実在しています
-rwxrwxr-x 1 root admin 46268 1 25 14:13 /Library/Frameworks/R.framework/Versions/3.2/Resources/library/tcltk/libs/tcltk.so* > file('/Library/Frameworks/R.framework/Versions/3.2/Resources/library/tcltk/libs/tcltk.so') description "/Library/Frameworks/R.framework/Versions/3.2/Resources/library/tcltk/libs/tcltk.so" class "file" mode "r" text "text" opened "closed" can read "yes" can write "yes"sem のバージョン情報は以下の通り(確認した範囲で最新)
Package: sem Version: 3.1-6 Date: 2015-06-09Macintosh で,OS のバージョン情報は以下の通り(最新)
OS X El Capitan バージョン 10.11.3R の sessionInfo は以下の通り(最新)
R version 3.2.3 Patched (2016-01-23 r69993) Platform: x86_64-apple-darwin13.4.0 (64-bit) Running under: OS X 10.11.3 (El Capitan) locale: [1] 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 loaded via a namespace (and not attached): [1] Rcpp_0.12.3 lattice_0.20-33 matrixcalc_1.0-3 MASS_7.3-45 grid_3.2.3 [6] arm_1.8-6 nlme_3.1-124 stats4_3.2.3 coda_0.18-1 mi_1.0 [11] minqa_1.2.4 nloptr_1.0.4 Matrix_1.2-3 boot_1.3-17 splines_3.2.3 [16] lme4_1.1-11 tools_3.2.3 abind_1.4-3
初学者 (2016-02-28 (日) 17:31:37)
統計言語Rについての質問です。
y_a = a + b1*x1 + b2*x2 + b3*x1*x2 + e
y_b = a + b1*x1 + b2*x2 + b3*x1*x2 + e
重回帰分析で交互作用を検討し、上記のモデルのx2を平均値で固定した時に、
x1を動かすとyの値がどう変化するかを、信頼区間も含めて2次元の図で表したいです。
観測されたデータは100行(変数名含めず)で上50行は[class = a]で下半分[class = b]です。
[class = a](または[class = b])だけに分けて、信頼区間含めた2次元の図は書くことができるのですが、信頼区間含め[class = a]と[class = b]を一枚で収めるためのプログラミングコードがわかりません。
ggplotでもRの標準グラフィックでもどちらでも構いませんので、ご教授願います。
申し訳ありませんが、OKwebでも同様の質問しております。http://okwave.jp/qa/q9135292.html
この画像は別々に画像をRから出力して、私が合成したものです。
これをRだけで作るコードををご教授願います。
data <- iris[-(51:100),] # y: Sepal.Width, x1: Sepal.Length, x2: Petal.Length, class: Species model <- lm( Sepal.Width ~ Species * Sepal.Length * Petal.Length, data) # 重回帰 agg <- aggregate(Petal.Length ~ Species, data, mean) # classとx2代入用 xpara <- seq(4, 8, 0.01) # x1代入用 a_conf <- predict(model, data.frame(Sepal.Length = xpara, Petal.Length=agg[1,2], Species=agg[1,1]), interval="confidence") # 予測値&信頼区間算出 b_conf <- predict(model, data.frame(Sepal.Length = xpara, Petal.Length=agg[2,2], Species=agg[2,1]), interval="confidence") plot(0, 0, xlim=c(4, 8), ylim=c(1.5, 5), type="n", ann=F) # 点線版 lines(xpara, a_conf[,1], col=2, lwd=2) for(i in 2:3) lines(xpara, a_conf[,i], col=2, lty=2) lines(xpara, b_conf[,1], col=4, lwd=2) for(i in 2:3) lines(xpara, b_conf[,i], col=4, lty=2) plot(0, 0, xlim=c(4, 8), ylim=c(1.5, 5), type="n", ann=F) # 塗りつぶし版 lines(xpara, a_conf[,1], col=2, lwd=2) # col2 = FF0000 lines(xpara, b_conf[,1], col=4, lwd=2) # col4 = 0000FF polygon( c(xpara, rev(xpara)), c(a_conf[,2], rev(a_conf[,3]) ), col="#FF000020", border=NA ) polygon( c(xpara, rev(xpara)), c(b_conf[,2], rev(b_conf[,3]) ), col="#0000FF20", border=NA )
limlim (2016-02-11 (木) 01:46:58)
約2年前~前日までの数値より説明変数に日本の祝日・月・曜日を加え、1ヶ月先の予測値を出すようにしましたが、予測値の算出式を知りたかったのですが、各説明変数の係数と標準誤差(s.e.)しか表示されないようです。算出式(定数項+1次前の数値×自己相関係数+ホワイトノイズ+1次前の移動平均の係数×ホワイトノイズ+・・・・)というような表示の仕方はありますでしょうか? よろしくお願いします。xreg.train<- data.frame( is.holiday=jholidays.xts["::2015-11-30"], year=year(date.train), month=as.factor(month(date.train)), day=day(date.train), wd=weekdays(date.train)) %>% dummy.data.frame %>% select(-month1,-wd日曜日) %>% as.matrix fit.arimax.cal<- auto.arima(call.train.ts,seasonal=T, trace=Txreg=xreg.train)#arimaxモデルのフィッティング ARIMA(2,0,2) with non-zero mean : 11402.32 ARIMA(0,0,0) with non-zero mean : 11664.95 ARIMA(1,0,0) with non-zero mean : 11402.53 ARIMA(0,0,1) with non-zero mean : 11451.06 ARIMA(0,0,0) with zero mean : 11665.87 ARIMA(1,0,2) with non-zero mean : 11401.18 ARIMA(1,0,1) with non-zero mean : 11403.75 ARIMA(1,0,3) with non-zero mean : 11401.67 ARIMA(2,0,3) with non-zero mean : 11404.22 ARIMA(1,0,2) with zero mean : 11400.29 ARIMA(0,0,2) with zero mean : 11417.95 ARIMA(2,0,2) with zero mean : 11401.2 ARIMA(1,0,1) with zero mean : 11403.12 ARIMA(1,0,3) with zero mean : 11400.76 ARIMA(0,0,1) with zero mean : 11450.95 ARIMA(2,0,3) with zero mean : 11403.14 Best model: ARIMA(1,0,2) with zero mean summary(fit.arimax.cal) Series: call.train.ts ARIMA(1,0,2) with zero mean Coefficients: ar1 ma1 ma2 is.holiday year month2 month3 以下略 0.7803 -0.2321 -0.1964 -379.1346 1.5137 195.9081 272.9902 以下略 s.e. 0.0837 0.0973 0.0656 42.8611 0.0387 96.4907 99.5181 101.4300 以下略 month11 month12 day wd火曜日 wd金曜日 wd月曜日 以下略 147.3163 414.5067 -1.1747 -104.1835 61.3693 22.6069 以下略 s.e. 93.0474 94.0236 1.5022 31.7203 31.6301 26.3375 32.3830 以下略 sigma^2 estimated as 59126: log likelihood=-5675.48 AIC=11398.96 以下略 Training set error measures: Training set ME -0.4521637 RMSE 243.158 以下略以下が予測結果(抜粋)
Forecasts: Forecast 3529.367 3404.598 3385.364 3563.843以下が予測開始日の前日から4日前までのデータ(抜粋)
3416 3329 3001 3446
はぶ (2016-02-05 (金) 11:42:30)
以下のようにfor文内で文字列のベクトルをwrite()で一行ずつ上書き出力をしています。dat <- NULL for(j in 1:10) { for(i in 1:(sample(3:8,1))) dat[i] <- paste(sample(letters, sample(3:5,1)),collapse="") write(dat,"dat.csv",append=T,sep=",",ncolumns=length(dat)) }実際の文字列ベクトルdatは他のデータフレームから抽出しており最大で数千要素、
添え字jのfor文のループ回数は数十万回のため処理速度を向上させたいと考えています。
ループごとにメモリからハードディスクに書き込みを行うのではなく、あらかじめ10000行×10000列で初期化したmatrixに1万ループ分程度のdatを格納し、write.table()などでまとめて保存すれば高速化できると考えたのですが、この方法は妥当でしょうか。
また、その場合は出力されるdatmatに初期化時の0が残るためファイルサイズが増えてしまいます。write()で一行ずつ出力した場合のように文字ベクトル以外はファイル中に含みたくないのですが、何か良い方歩はありますでしょうか。
宜しくお願いします。
まるでダメ男 (2016-01-29 (金) 19:08:55)
失礼します。投稿文書の書式のリンクが無効で読み込めなく書き方がわからなかったので見にくいかもしれません。
自作関数の引数を名前にした値を名前にして返り値で自動的に書き出したいと思ったのですが、関数内にwrite.csvを使っても書き出しされません。
例えば、kakidasi<-function(a,b) { 何らかの処理でxを得る return(x) write.csv(x, paste("~/Student_dat/",substitute(a), "_", substitute(b), ". csv", sep=""), fileEncoding="Shift-JIS") }で処理を行っても得られるのはXだけです。フォルダに書き出しは行われていません。
何か良いアドバイスをいただけますでしょうか。
paste("~/Student_dat/",substitute(a), "_", substitute(b), ". csv", sep="")では,当然ながら . と csv の間に空白がありますので,トラブルのもとになるでしょう。 -- 河童の屁は,河童にあらず,屁である。 2016-01-29 (金) 21:02:59
まるでダメ男 (2016-01-15 (金) 18:59:21)
失礼いたします。ただいま自作の関数を作成しました。
以下の関数を動作してみたところif (amoji_retsu >= bmoji_retsu) { でエラー: 引数の長さが 0 ですとのメッセージが出ました。
mojiretsu_hyouka <- function(a, b, sansyo) { gyou_num1 <- as.integer(rownames(a)) # aの行数全て gyou_num2 <- as.integer(rownames(b)) # bの行数全て l <- expand.grid(gyou_num1, gyou_num2) # 全ての組み合わせパターン(gyou2)を起点に繰り返す upto <- nrow(l) # lの行数 k <- 1 Jaccardの類似度表 <- NA while (k <= upto) { moji_a <- as.character(a[l[k, 1], 1]) # aの文字列をlの組み合わせで順に実行していく moji_a_kaisuu <- as.integer(a[l[k, 1], 3]) moji_b <- as.character(b[l[k, 2], 1]) # bも同様に moji_b_kaisuu <- as.integer(b[l[k, 1], 3]) amoji_retsu <- which(colnames(sansyo) == moji_a) # moji_aがある列番号を取り出す bmoji_retsu <- which(colnames(sansyo) == moji_b) # moji_bがある列番号 amoji_gyou <- which(sansyo$id == moji_a) # moji_aがある行番号を取り出す bmoji_gyou <- which(sansyo$id == moji_b) # moji_bがある行番号 if (amoji_retsu >= bmoji_retsu) { Jaccardの値 <- sansyo[amoji_gyou, bmoji_retsu] h <- data.frame(paste(moji_a, moji_b, sep = "_"), moji_a, moji_a_kaisuu, moji_b, moji_b_kaisuu, Jaccardの値) Jaccardの類似度表 <- cbind(Jaccardの類似度表, h) } else { Jaccardの値 <- sansyo[bmoji_gyou, amoji_retsu] h <- data.frame(paste(moji_a, moji_b, sep = "_"), moji_a, moji_a_kaisuu, moji_b, moji_b_kaisuu, Jaccardの値) Jaccardの類似度表 <- cbind(Jaccardの類似度表, h) } k <- k + 1 # カウント } return(invisible(Jaccard係数の類似度表)) }この関数の引数,a,b,sansyoは
> head(a) 抽出語 品詞 出現回数 1 身 名詞C 42 2 問題 ナイ形容 41 3 なる 動詞B 39 4 つける 動詞B 38 5 リスニング 名詞 37 6 解ける 動詞 32 > mode(a) [1] "list"~これと同じ形の引数 b
それと3つ目の引数sansyoはid 基本 法則 概要 概念 特徴 原理 基礎 1 基本 NA NA NA NA NA NA NA 2 法則 0.024 NA NA NA NA NA NA 3 概要 0.005 0.0000 NA NA NA NA NA 4 概念 0.040 0.030 0.0069 NA NA NA NAこのような形の縦横5422のデータベースです。
> mode(sansyo) [1] "list"~また、そもそも引数はこのようなリスト型でも良いのでしょうか?
環境は以下のようになっています。sessionInfo() R version 3.2.2 (2015-08-14) Platform: x86_64-apple-darwin13.4.0 (64-bit) Running under: OS X 10.11.1 (El Capitan)では、宜しくお願いします。
a <- data.frame(抽出語 = c("つける", "なる", "リスニング", "解ける", "身", "問題"), 品詞 = c("ナイ形容", "動詞", "動詞B", "名詞", "名詞C"), 出現回数 = c("抽出語", "品詞", "出現回数")) b <- 省略 sansyo <- structure(list(id = structure(c(3L, 4L, 2L, 1L), .Label = c("概念", "概要", "基本", "法則"), class = "factor"), 基本 = c(NA, 0.024, 0.005, 0.04), 法則 = c(NA, NA, 0, 0.03), 概要 = c(NA, NA, NA, 0.0069), 概念 = c(NA, NA, NA, NA), 特徴 = c(NA, NA, NA, NA), 原理 = c(NA, NA, NA, NA), 基礎 = c(NA, NA, NA, NA )), .Names = c("id", "基本", "法則", "概要", "概念", "特徴", "原理", "基礎"), class = "data.frame", row.names = c("1", "2", "3", "4"))バグを発見するには,主要な場所で,変数がどのようになっているかを print 文を挿入するなどして確認していくのがよいでしょう。
amoji_retsu <- which(colnames(sansyo) == moji_a) # moji_aがある列番号を取り出すでは,最初にこの文が実行されたあと,
colnames(sansyo) : [1] "id" "基本" "法則" "概要" "概念" "特徴" "原理" "基礎" moji_a = 身 amoji_retsu : integer(0)となります。提示されたデータでは colnames(sansyo) に moji_a が含まれないので,amoji_retu は integer(0) になっています。あなたの実際のデータでも,そのような場合があるのです。そしてその結果を使って if (amoji_retsu >= bmoji_retsu) のような,比較をすることができない(引数の長さが 0 です)ということになります。そのような場合にはどのように処理するかというプログラム部分を追加しないといけませんね。
初学者 (2016-01-10 (日) 15:18:37)
library(MASS) b <- biopsy b$classn[b$class==“benign”] <- 0 b$classn[b$class==“malignant”] <- 1 ggplot(b, aes(x=V1, y=classn)) + geom_point() + geom_smooth(method = glm, family = binomial) エラー: Unknown parameters: family上記のようにRグラフィッククックブックのコードに従って、グラフを出力しようとしたところ、エラーが表示されてしまいグラフをを出力できません。このエラーの解決方法をご教授願います。
わっと (2016-01-08 (金) 18:14:05)
ベイジアンネットワークのパッケージ deal において、localprob というコマンドを実行すると、作成したベイジアンネットワークモデルに対して、離散型のデータの場合は変数間の条件付確率が返されて、連続型のデータの場合は回帰係数が返されるらしいのですが、その回帰係数の解釈がよくわかりません。
分析に使ったデータは、2014年のプロ野球のデータ(一部はゲーム内における選手の能力値)で、変数は能力値であるミート、パワー、走力、肩力、守備力、捕球の6つと、選手の年俸、身長、体重、年齢、本塁打数、安打数、三振数、盗塁数、失策数が9つの合計15の連続変数を用いて分析をしました。
肩力についての回帰係数を見てみると、$肩力 [,1] [,2] [,3] [1,] 63.25038 57.33878 0.07894247しかし、作成したベイジアンネットワークモデルにおいての有向辺が引かれているのは、7列目の変数の守備力から、6列目の肩力に対してだけです。
すると、回帰係数は1つだけ表示されると思うのですが、なぜ3つ出力されているのでしょうか?
また、表示された回帰係数はどのように解釈すればよいのでしょうか?
http://d.hatena.ne.jp/araili/20100603/1275547994の例にあるように,ベースの設定はせずに,各カテゴリーへの回帰係数が表示されるのかな?つまり,あなたの「肩力」が3カテゴリーならそういうこと。4カテゴリーなら「最後のカテゴリーがベースになっている」
(2016-01-03 (日) 01:45:45)
前提:下記二種類のデータフレームA,Bがあるとします。
A.変数xを保持するデータフレームx 0.0 0.1 ... 9.9※0.0-9.9は例であり実際は色々なる値を取ります。
B.変数xの区間と変換方法(切片と傾き)を保持するデータフレームstart end intercept coefficient 0.0 0.3 5.0 1.0 0.3 0.9 4.7 2.0 1.5 2.0 3.0 4.0 ...※上記の区間は重なり合うことはありませんが、歯抜けになることがあります。
※レコード数は固定ではなく可変です。
やりたいこと:
1.データフレームBに基づきデータフレームAの変数xに変換処理をする。
具体的には変数xがデータフレームBのstart-endに該当すればintercept+coefficient*xに変換する。
2.データフレームBのstart-endに該当しない区間がデータフレームAの変数xに存在する場合、線形補完して変換する。
上記データフレームBの場合、区間0.9-1.5が存在しないのでstart end intercept coefficient 0.3 0.9 4.7 2.0 1.5 2.0 3.0 4.0の両端を結んだ直線で変換処理を行う。
a <- data.frame(x=seq(0, 2.2, by=0.1)) b <- data.frame(start=c(0.0, 0.3, 1.5), end=c(0.3, 0.9, 2.0), intercept=c(5.0, 4.7, 3.0), coefficient=c(1.0, 2.0, 4.0)) y <- data.frame(t(apply(b, 1, function(z) z[3]+z[1:2]*z[4]))) # 各区間の両端での y 座標 b3 <- b[1,] # 歯抜けの区間を補間する(区間での intercept と coefficient を求める) for (i in 2:nrow(b)) { # i = 3 のとき if (b$start[i] != b$end[i-1]) { # b$start[3] = 1.5, b$end[2] = 0.9 x.s <- b$end[i-1] # 0.9 y.s <- y$end[i-1] # 6.5 x.e <- b$start[i] # 1.5 y.e <- y$start[i] # 9.0 Coefficient <- (y.e-y.s)/(x.e-x.s) # (9.0-6.5)/(1.5-0.9) = 4.16667 Intercept <- y.s-x.s*Coefficient # 6.5-0.9*4.16667 = 2.75 b3 <- rbind(b3, c(x.s, x.e, Intercept, Coefficient)) } b3 <- rbind(b3, b[i, ]) } n = length(a$x) y = numeric(n) for (i in seq_along(y)) { # 該当区間での変換結果 y を求める x = a$x[i] j <- which(b3$start <= x & x <= b3$end) if (length(j)) { y[i] <- b3$intercept[j[1]]+x*b3$coefficient[j[1]] } else { y[i] <- NA } } y
初心者R (2015-12-30 (水) 20:38:31)
データ解析にRを利用したくRExcelの導入を試みました。
R-3.2.3とstatconnDCOMをインストール後、R上でrscproxyのパッケージをインストールし、
rcomをダウンロードすると
警告メッセージ:
package `rcom` is not available
と表示されます。
またrcomを無視してRExcellnst3.2.15をインストールして起動してみましたが、
No R server configuredと表示されて、起動できませんでした。
RAndFriendsは消えてしまったようで、RExcelのダウンロード手順も検索しても新しい物が見当たらず困っております。
(R, Excelは管理者権限で実行しています)
わっと (2015-12-25 (金) 21:05:53)
初投稿です。
Rパッケージを最新版に更新したら、どうやらパッケージが初期化されてしまったみたいで、もう一度インストールをしようとしました。パッケージ ‘deal’ は無事に展開され、MD5 サムもチェックされました 警告: 一時的なインストール ‘C:\Users\wataru\Documents\R\win-library\3.2\file12c02e8d32da\deal’ を ‘C:\Users\wataru\Documents\R\win-library\3.2\deal’ へ移動できませんでした ダウンロードされたパッケージは、以下にあります C:\Users\wataru\AppData\Local\Temp\Rtmp4O0dGX\downloaded_packages 警告メッセージ: download.file(url, destfile, method, mode = "wb", ...) で: ダウンロードされた長さ 189305 != の報告された長さ 200 ですこのように、パッケージdealをダウンロードすることはできたのですが、パッケージの読み込みのところを見ても、dealが追加されていません。どうすればよいのでしょうか?
ちなみに、Rを初めてインストールしたのは去年の五月で、今回初めて更新しました。使用OSはwindows10です。
(2015-12-22 (火) 01:37:05)
連番の変数をassign()を使用して、それぞれにcsvを読み込みました
read.csv以下:datayardはcsvのあるフォルダ名が代入
file.nameはcsvの名前の共通部分
sort_listに各csvの異なる数字が格納されています。for(j in 1:nrow(sort_list)) { assign(paste("data", j, sep=""), read.csv(paste(datayard, file.name, sort_list[j, ], ".csv", sep=""), header=T))}これによってdata1,data2という変数に異なるcsvを読み込みました。
ここからが困っているところなのですが、
各data1,data2の同じ列のデータだけ取り出して一つの変数に代入したいのですが、dataの数が少ないときは> data <- cbind(data1[, 1], data2[, 1])という風にやれば望む形になるのですが、すべての列についてやりたいのと、data1~100を超えるので、ループで変数も連番でまとめたいのですが
イメージではfor(i in 1:100) { data <- cbind(data, datai[, 1]) }という風にやりたいのですが、どうやったらいいのでしょうか?
"a","b","rnorm" 1,"a",-0.252631231784056 2,"b",0.650075900149871 3,"c",-0.639124667772796 4,"d",1.57159006714947 5,"e",-1.10845059755105このようなデータを読み込んで,一つのデータフレームに連結(rbind)してゆく
datayard <- "~/R/" file.name <- "test" sort_list <- c(1, 2, 6, 9) d <- NULL for (j in sort_list) { temp <- read.csv(paste0(datayard, file.name, j,".csv")) d <- rbind(d, temp) }d を表示すると
a b rnorm 1 1 a -0.25263123 2 2 b 0.65007590 3 3 c -0.63912467 4 4 d 1.57159007 5 5 e -1.10845060 6 6 f -1.01847370 : 19 19 s 1.88522585 20 20 t 0.84095473というようになっていることが確認出来ますね。
d <- vector("list") for (j in sort_list) { d[[j]] <- read.csv(paste0(datayard, file.name, j,".csv")) } d2 <- Reduce(rbind, d)要するに,for ループや,*apply 関数で扱いやすいようにプログラムするのです。 -- 河童の屁は,河童にあらず,屁である。 2015-12-22 (火) 06:49:15
名無しさん (2015-12-20 (日) 19:14:49)
rで最小0、最大100の範囲で整数の一様乱数を1万個発生させ、その群をaとしました。table(a)でどの値が何個出てきたのかを調べるまではできたのですが、それをグラフにするやり方が分かりません。グラフについて詳しく言うと、横軸が整数値(0~100)、縦軸が発現回数で線は曲線にしたいです。どのようなコマンドを入力すればよいのでしょうか。
a <- sample(0:100, 10000, replace = TRUE) b <- table(a) plot(0:100, c(b), type = "l", ylim = range(b), ylab = "発現回数", xlab = "X")
tao (2015-12-15 (火) 18:16:40)
初等的な質問で申し訳ございません。 以下のようなデータで> test A B C 1 1 1 8118 2 1 1 1785 3 1 1 2122 4 1 2 9448 5 1 2 8237 6 1 2 17868 7 1 2 33593 8 1 2 0 9 2 1 14015 10 2 1 632 11 2 2 947 12 2 2 330 13 2 2 5444 14 2 2 4140 15 3 1 2419 16 3 2 396 17 3 2 7809 18 4 1 2657 19 4 2 362 20 4 2 0 21 5 1 412 22 5 1 6637 23 5 2 2269 24 5 2 3873 25 5 2 2376 26 5 2 10303 test<-read.csv(file="test7.csv",header=TRUE) summary ( aov (C~A*B, data=test) ) summary ( aov (C~B*A, data=test ) )というコマンドを実行すると
> summary ( aov (C~A*B, data=test) ) Df Sum Sq Mean Sq F value Pr(>F) A 1 1.392e+08 139199274 2.676 0.116 B 1 2.728e+07 27281060 0.524 0.477 A:B 1 4.053e+07 40530623 0.779 0.387 Residuals 22 1.144e+09 52017772 > summary ( aov (C~B*A, data=test ) ) Df Sum Sq Mean Sq F value Pr(>F) B 1 2.369e+07 23693485 0.455 0.507 A 1 1.428e+08 142786849 2.745 0.112 B:A 1 4.053e+07 40530623 0.779 0.387 Residuals 22 1.144e+09 52017772という結果がでてきて、交互作用については、一致するのですが、主効果の結果が違ってしまいます。
データセットの並べ方を変えてBの項目を先に並べても同じ結果となってしまいます。
これは何がいけないのでしょうか。
何か、ご存じの方がいらっしゃいましたら、お教え頂ければ幸いです。
> library(car) > Anova(aov (C~A*B, data=test ), type="II") Anova Table (Type II tests) Response: C Sum Sq Df F value Pr(>F) A 142786849 1 2.7450 0.1118 B 27281060 1 0.5245 0.4766 A:B 40530623 1 0.7792 0.3869 Residuals 1144390976 22 > Anova(aov (C~B*A, data=test ), type="II") Anova Table (Type II tests) Response: C Sum Sq Df F value Pr(>F) B 27281060 1 0.5245 0.4766 A 142786849 1 2.7450 0.1118 B:A 40530623 1 0.7792 0.3869 Residuals 1144390976 22
R初心者 (2015-12-08 (火) 21:08:40)
Mac OSX上でRを動かしています。
棒グラフを書く際に、余白の調節をしようとpar(mar=)をコマンドに加えたいと考えています。
しかし、実際にやってみると
par(mar = c(10,3,2,2))エラー: 想定外の入力です in "par(mar = c(10,3,2,2))
このようなエラーが出るため余白の調節がされないままにグラフが出力されてしまいます。
一方で、データの取り込みからグラフの出力までをコピペで一気にせず、
グラフの取り込み→par(mar=)→barplot()とすると上手くいきます。
この理由が何なのか、また一度のコピペで綺麗に出力する方法があるのか知りたいです。
周りにRを使っている人がおらず、自分で調べてもよくわかりませんでした。
やはり、Mac上で動かしていることが原因なのでしょうか。
何かご存知の方がいらっしゃいましたら、知識を分けていただけると幸いです。
よろしくお願い致します。
tbl <- table(iris$Species) par(mar = c(10,3,2,2)) barplot(tbl)この入力ではエラーが出ないなら,あなたがやった一部始終をこぴぺしてみれば?
data <- read.table("サンプル",header = T, row.name = 1, sep = ",") #dataの取り込み data <- as.matrix(data) # matrixへの変換 data <- t(data) # 行列の入れ替え data.mean <- apply(data, 2, mean, na.rm =T) # グラフの平均値(グラフの高さの算出) data.sd <- apply(data, 2, sd, na.rm = T) # 誤差範囲 par(mar = c(10,3,2,2)) #余白の計算 data.graph <- barplot(data.mean, main = "名前 ", ylim = c(0,max(data.mean+data.sd)*1.1), ylab = "Relative gene expression level", col = c("1","8","1","8","1","8","4","2"), font.axis = 15, cex.lab = 1.2, cex.axis = 1.2, las = 2) #グラフの作図 arrows(data.graph, data.mean - data.sd, data.graph, data.mean + data.sd, angle = 90, length = 0.1) # 正のエラーバー作図 arrows(data.graph, data.mean + data.sd, data.graph, data.mean - data.sd, angle = 90, length = 0.1) # 負のエラーバー作図
初心者 (2015-11-28 (土) 11:31:03)
model.frame.default(formula = y ~ x1 + x2 でエラー: 型 (NULL) は変数 'x1' に対しては不正です重回帰分析を実行すると、上記のエラーメッセージが表記されます。
エクセルでデータセット(csv形式、21行4列)を作成しました。
1行目は変数名です。また、1列目〜4列目まではid:Factor y:int x1:int x2:intという型式です。
> data<-read.csv("sample.csv",header=TRUE) >lm(y~x1+x2, data=data) model.frame.default(formula = y ~ x1 + x2 でエラー: 型 (NULL) は変数 'x1' に対しては不正ですこのようなエラーが発生してしまう原因をお教えいただければ幸いです。
よろしくお願いします。
まつ (2015-11-26 (木) 16:46:40)
申し訳ありません R 使いたての初心者です
単純な重回帰分析で実験ケースごとのカテゴリー変数を投入したいと考えています。result<-lm(dependent~ hoge + as.factor(sortcase)) summry(result)と記述しました。これを実行してみると
Estimate Std. Error t value Pr(>|t|) (Intercept) 0.1213389 0.0039691 30.571 < 2e-16 *** hoge 0.0300854 0.0080421 3.741 0.000184 *** as.factor(sortcase)2 0.2413299 0.0074716 32.300 < 2e-16 *** as.factor(sortcase)3 -0.0124357 0.0080555 -1.544 0.122657 as.factor(sortcase)4 -0.1181738 0.0089075 -13.267 < 2e-16 ***と結果が返されます。
as.factor(sortcase)1 が推定されないのはなぜですか?
Intercept と同じだからでしょうか
教えて貰えれば幸いです
たけ (2015-11-25 (水) 09:39:01)
お世話になります。01データ、あるいは数カテゴリのみのカテゴリカルデータ同士の分布と関係性を容易に一覧する方法をご存じでしたらお教えいただければ幸いです?
連続変数であれば相関係数行列cor(x)やplot(x)とすれば分布と関係性を大まかに一覧できますが、01データの場合、距離行列dist(x)と共起ネットワーク図plot(network(x))くらいしかないでしょうか?
Rに困った (2015-11-18 (水) 17:01:20)
a=matrix(c(4,3,3,4,2,2,4,1,1),3,3)とし,
|4 3 3| a=|4 2 2| |4 1 1|のように行列を作成後,
colnames(a)=("A","B","C")とし,
A B C |4 3 3| a=|4 2 2| |4 1 1|とします.
ここから,C列(3,2,1)の[要素]情報を使って
aの配列にアクセス:
a[1,]の3列目,
a[2,]の2列目,
a[3,]の3列目
すなわち,c(3,2,4)を取り出したいのですが,
どなたかよい方法をご教授いただけないでしょうか?
> a[cbind(1:3,a[,3])] [1] 3 2 4でしょう? -- 河童の屁は,河童にあらず,屁である。 2015-11-18 (水) 17:30:37
かがみ (2015-11-16 (月) 16:52:13)
お世話になります。data(iris) heatmap(as.matrix(iris[,1:4])) legend("topleft", colnames(iris)[1:4])legendの枠を左上の余白に作成して図に被らないようにしたいのですが、どのようにすればよいでしょうか。おそらくheatmap図の左上の領域は余白になっているために、legendを描けないようなのです。
環境はWindows7、R3.1.2です。
お手数ですが、どなたかご回答宜しくお願いします。
さくら (2015-11-14 (土) 15:23:35)
RHmm という隠れマルコフ解析用パッケージをダウンロードしたいのですが
見つかりません。
どこにあるか教えてもらえないでしょうか。
TTT (2015-11-04 (水) 22:05:07)
非常に初歩的で申し訳ありません。
とある疾患について、Nomogramを作成したいのですが(論文でよくRがひっかっかてきます。)、EZ-Rでどのように操作すれば良いのかわかりません。(あくまで操作の問題です・・・)
何か参考に出来る書籍等ご存知の方はいらっしゃいませんでしょうか?
# ロジスティック回帰分析の結果からノモグラム作成 nomogram <- function(name, b, value, b0, factor = 10) { scale <- function(title, y.pos, min.x, max.x, label) { scale0 <- function(min.x, max.x, tick, delta, label) { x.pos <- seq(min.x, max.x, by = tick) if (is.null(label)) label = x.pos segments(x.pos, y.pos, x.pos, y.pos + delta * h, xpd = TRUE) if (tick == 10) { text(x.pos, y.pos + 0.5 * h, label, pos = 3, xpd = TRUE) } } text(0, y.pos + 0.5, title) segments(min.x, y.pos, max.x, y.pos, xpd = TRUE) scale0(min.x, max.x, 1, 0.5, NULL) scale0(min.x, max.x, 5, 0.8, NULL) scale0(min.x, max.x, 10, 1, label) } b <- factor * b b0 <- factor * b0 m <- length(name) d <- expand.grid(lapply(value, as.integer)) point <- t(t(d) * b) r <- pretty(apply(point, 2, range)) min.x <- min(r) max.x <- max(r) plot(c(min.x, max.x + 10), range(0:(m + 4)), type = "n", bty = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "") h <- strheight("H") m3 <- 0.5 * m + 3 text(0, m3 + 0.5, "リスク") lp <- (c(min.x, max.x) + b0)/factor P <- pretty(1/(1 + exp(-lp))) p <- c(0.01, 0.05, seq(0.1, 0.9, by = 0.1), 0.95, 0.99) lp <- -log((1 - p)/p) pos.x <- lp * factor - b0 segments(min(pos.x), m3, max(pos.x), m3, xpd = TRUE) segments(pos.x, m3, pos.x, m3 + h, xpd = TRUE) text(pos.x, m3 + 0.5 * h, p, pos = 3, xpd = TRUE) lp <- pretty((c(min.x, max.x) + b0)/factor) lp <- seq(min(lp), max(lp), by = 1) min.pt <- factor * min(lp) - b0 max.pt <- factor * max(lp) - b0 scale("リニア・プレディクタ", 0.5 * m + 2, min.pt, max.pt, lp) scale("ポイント", 0.5 * m + 1, min.x, max.x, NULL) for (i in 1:m) { v <- value[[i]] l <- length(v) if (l > 5) { v <- pretty(v) l <- length(v) } col <- (b[i] < 0) + 1 x <- v * b[i] pos.y <- i * 0.5 segments(x[1], pos.y, x[l], pos.y, col = col) segments(x, pos.y, x, pos.y + h, col = col) text(x, pos.y + 0.5 * h, v, pos = 3, col = col) text(x[1], pos.y, name[i], pos = ifelse(col == 1, 2, 4)) } r <- range(lp) } # 使用例(グラフィックウインドウの大きさを調整して何回か描画してください) lp <- nomogram(name = c("属性変数", "属性変数2", "連続変数"), # 変数名 b = c(2.21, 1.34, -0.18), # 係数 value = list(c(0, 1, 2, 3), c(0, 1), 10:30), # 変数の取る値 b0 = -1.53) # 定数項
通りすがり (2015-10-30 (金) 15:51:34)
行列の操作について質問です。
(質問1)
0または1を要素として持つM×N行列に対し
全ての要素を反転する(0を1、1を0に変換する)方法はありますでしょうか?
(質問2)
実数値を要素として持つM×N行列に対し
指定した列の値を指定した値(例えば0に置き換え)に
全て置換する方法はありますでしょうか?
> set.seed(0) > (mat <- matrix(sample(0:1, 20, TRUE), 4, 5)) [,1] [,2] [,3] [,4] [,5] [1,] 1 1 1 0 0 [2,] 0 0 1 1 1 [3,] 0 1 0 0 1 [4,] 1 1 0 1 0 > apply(mat, c(1, 2), function(x) ifelse(x==0, 1, 0)) [,1] [,2] [,3] [,4] [,5] [1,] 0 0 0 1 1 [2,] 1 1 0 0 0 [3,] 1 0 1 1 0 [4,] 0 0 1 0 1>(質問2)
> mat[,3] <- 99 > mat [,1] [,2] [,3] [,4] [,5] [1,] 1 1 99 0 0 [2,] 0 0 99 1 1 [3,] 0 1 99 0 1 [4,] 1 1 99 1 0
霜 (2015-10-21 (水) 14:48:54)
お世話になります。
以下のようなデータフレームxに対して、まずcat列で昇順にソートし、次にname列で降順にソートしたいのですが、どのようにすればよいでしょうか。cat列には"A","B"の2値しかなく、Name列には一意の文字列が格納されています。
cat <- c("A","B","B","A","A") name <- c("aaa","ddd","bbb","ccc","eee") weight <- c(51,55,72,57,64) x <- data.frame(CAT=cat, Name=name, WEIGHT=weight)
お手数ですが、ご回答宜しくお願いします。
> cat <- c("A","B","B","A","A") > name <- c("aaa","ddd","bbb","ccc","eee") > weight <- c(51,55,72,57,64) > x <- data.frame(CAT=cat, Name=name, WEIGHT=weight, stringsAsFactors=F) > > sortlist <- order(x$CAT, pmax(x$CAT, x$Name)) > x[sortlist,] CAT Name WEIGHT 1 A aaa 51 4 A ccc 57 5 A eee 64 3 B bbb 72 2 B ddd 55
> z <- lapply(split(x, x$CAT), function(y) {o <- order(y$Name, decreasing=TRUE); y[o,]}) > a <- rbind(z[[1]], z[[2]]) > a CAT Name WEIGHT 5 A eee 64 4 A ccc 57 1 A aaa 51 2 B ddd 55 3 B bbb 72cat が複数種あるような場合でも,rbind を以下のようにすれば無問題。
> z <- lapply(split(x, x$CAT), function(y) {o <- order(y$Name, decreasing=TRUE); y[o,]}) > a <- z[[1]] > for (i in 2:length(z)) a <- rbind(a, z[[i]]) > a CAT Name WEIGHT 5 A eee 64 4 A ccc 57 1 A aaa 51 2 B ddd 55 3 B bbb 72あるいは,Name の逆順キーを作って,ソートする。これもトリッキー。
> key <- -as.integer(factor(x$Name)) > o <- order(x$CAT, key) > x[o,] CAT Name WEIGHT 5 A eee 64 4 A ccc 57 1 A aaa 51 2 B ddd 55 3 B bbb 72いずれにしても,あれこれうまい方法を探すより,ダサくってもサクっと動くプログラムを作る方が速い。
cloud (2015-10-16 (金) 14:00:41)
いつもお世話になっています。
A4の用紙方向を下の様な感じで切り分けて印刷したいと考えています。
このコマンドではプリンタのデバイスの縦横設定を手動で事前に切り替えないと、うまく動作しません。
印刷方向をうまく切り換える方法をご存じないでしょうか。if (yokogaki == FALSE) { win.print(width=8, height=11, restoreConsole = FALSE, printer = "プリンタ名" ) # 縦書印刷 par(mar = c(16, 7, 4, 4)) } else { win.print(width=11, height=8, restoreConsole = FALSE, printer = "プリンタ名" ) # 横書印刷 par(mar = c(5, 4, 5, 12)) }
markovchainmontecarlo (2015-10-14 (水) 23:07:26)
いつもお世話になっております。
ふと思ったのですが、Rにおいてシングルクォート(’)とダブルクォート(”)の違いはありますでしょうか。
以下のコードと結果から違いはないと思われますが、確かな文献などが見つかりません。
ご存知の方がいらっしゃいましたら、教えた頂けたら幸いです。> hoge <- 3 > print(hoge) [1] 3 > print("hoge") [1] "hoge" > print('hoge') [1] "hoge"よろしくお願いいたします。
> print("hoge") [1] "hoge" > print('hoge') [1] "hoge" > print("'hoge'") [1] "'hoge'" > print('"hoge"') [1] "\"hoge\""何が入れ子になっているかで少し違うみたいですね。
中阪 隆 (2015-10-14 (水) 18:13:40)
データフレームを、固定の名前ではなく、変数名で取り扱うには、どうしたら良いでしょうか?
現在は、対象のデータフレームを操作するSQl文字列を生成して、sqldfで実行していますが、これ以外の方法も探していますが、見つけられていません。
よろしくお願いします。
あき (2015-10-12 (月) 16:05:10)
最近になって、Rのパッケージをインストールして、何度か使用した後に、Rを終了すると、次回Rを起動させると、パッケージがインストールされていない状態に戻ってしまいます。前までは、Rを終了させてもパッケージは保存状態にありました。なぜこのようなことが起こるのでしょうか。
library()で調べても、「パッケージ自体が」見つからない状態ですか? -- markovchainmontecarlo 2015-10-12 (月) 17:30:43
回答者は神通力を持ってはいません。「これこれしたが、うまく動きません」といった質問には、あなたの試みたことを回答者が再現できるような、データ、コード、エラー出力(そして、R のバージョン、使用 OS、使用非標準パッケージ名)を添えることをお勧めします。あまりに長くなる場合は適宜編集して下さい。
(2015-09-29 (火) 12:42:24)
あるデータフレーム(1つの目的変数と200の説明変数)があり
・目的変数は0/1のみ
・説明変数は全て数値型でNAや外れ値の意味をもつ99999が含まれている
各説明変数について、NA、99999を該当するレコードの目的変数の平均値に置き換えたいのですが
どのようにやるとスマートでしょうか?
> # テストデータ生成 > set.seed(12345) > n <- 10 > d <- data.frame(y=sample(0:1, n, replace=TRUE), + x1=sample(50, n, replace=TRUE), + x2=sample(250, n, replace=TRUE)) > d[sample(n, 5), 2] <- NA > d[sample(n, 5), 3] <- NA > d[sample(n, 5), 2] <- 99999 > d[sample(n, 5), 3] <- 99999 > d y x1 x2 1 1 NA 99999 2 1 99999 82 3 1 NA 242 4 1 99999 99999 5 0 NA NA 6 0 99999 98 7 0 20 175 8 1 99999 99999 9 1 9 99999 10 1 99999 99999 > # 例解 > d[,-1] <- sapply(d[,-1], function(z) { + z[z == 99999] <- NA + z[is.na(z)] <- mean(z, na.rm=TRUE) + z}) > d y x1 x2 1 1 14.5 149.25 2 1 14.5 82.00 3 1 14.5 242.00 4 1 14.5 149.25 5 0 14.5 149.25 6 0 14.5 98.00 7 0 20.0 175.00 8 1 14.5 149.25 9 1 9.0 149.25 10 1 14.5 149.25
windsor (2015-09-26 (土) 22:06:10)
t検定でt値がとても大きい場合、p値をpt関数で計算すると、p=0となってしまいますが、これをp=1.0E-200というような値で(その数値が統計学的に意味のある値かどうかは別として)表示することはできませんでしょうか?例えば、t値が52、自由度が4700で、以下のようなコマンドを用いた場合です。pt(52,4700,lower.tail=FALSE)*2どうぞよろしくお願いいたします。
> sprintf("%a", pt(52,4700,lower.tail=FALSE)*2) [1] "0x0p+0"となり,コンピュータ上では「完全に 0」です。 t 値が 41 以下ならば,極めて0に近い値。内部表示も 0 ではありません。
> sprintf("%a", pt(41,4700,lower.tail=FALSE)*2) [1] "0x1.ddc34cd8p-1043"10 進表示をしたいなら %g を指定して
> sprintf("%g", pt(41,4700,lower.tail=FALSE)*2) [1] "1.9801e-314" > cat(sprintf("%g", pt(41,4700,lower.tail=FALSE)*2)) 1.9801e-314なお,計算される P 値は,「近似値」なので,こんなに小さい値の精度なんて想像するのも無駄。 いずれにせよ,あまり意味のあることではないですね。 -- 河童の屁は,河童にあらず,屁である。 2015-09-27 (日) 10:43:08
初学者 (2015-09-26 (土) 20:26:23)
Rについての質問です。xに数字を格納した覚えがないのに、xに数値が格納されている状態になります。Rを再起動、再インストールしてもxに数値が代入されたままになってしまいました。このような状態を直すためにはどのようにすればよいでしょうか。以下のように命令をうつと、エラーメッセージが表示されます。attach関数を使って、filenameのxをfilename$xの前半部分を省きたいのですが、以下のエラーメッセージがでます。dat <- read.csv("filename.csv",header=TRUE) attach(dat) 以下のオブジェクトは .GlobalEnv? によってマスクされています: xよろしくお願いします。
markovchainmontecarlo (2015-09-25 (金) 20:31:43)
Wikiに「並列計算について」の記載が乏しいと思いましたので、ページを新たに立ち上げようかと思っていますが、このような行為をしてもいいのでしょうか。
Rで並列計算のページは存じておりますが、もう少し簡単に扱える「snowfall」パッケージの紹介などをしようと思っています。
皆様のご意見を伺いたく思います。
markovchainmontecarlo (2015-09-18 (金) 13:52:11)
CRANの数について質問があるので、ご存知の方がいらっしゃいましたら回答いただけると幸いです。
R3.0.2では非常に多くのCRANミラーサイトがあり、[JAPAN]では[TOKYO]と[YAMAGATA]がありました。
しかしR3.2.2では20程度しかなく、[JAPAN]はありませんでした。
今後ミラーサイトは(登録が済んでいないなどの理由から)順次追加されるとの認識でいいのでしょうか。
よろしくお願いいたします。
CRA (2015-09-14 (月) 11:02:07)
回帰分析において 目的変数~説明変数 の形式でlm()を実行したいのですが、dataの列名に"-"が含まれているとエラーになるようです。#正常に実行できる x <- trees lm(Volume ~ Girth, data = x) #列名を変更 colnames(x)[1] <- "A-3" lm(Volume ~ A-3, data = x)このような列名を含むdataではどのように説明変数を指定すればよいのでしょうか。
宜しくお願いします。
ヒート (2015-09-11 (金) 09:27:49)
お世話になります。
heatmap()で水平方向のラベルを特定の条件で色分けしたいと考えています。x <- as.matrix(mtcars) heatmap(t(x))この場合、"Mazda"を含むラベルを赤、"Merc"を含むラベルを青にするにはどのようにすればよいでしょうか。
おそらくheatmap()の戻り値を使えばよいのだとは思うのですが、やり方がわかりませんでした。
環境はWin 7, R 3.0.2です。
どなたかご教示宜しくお願いします。
B4 (2015-09-05 (土) 07:45:52)
点パターンの凝集性を評価する際に、rがどのくらいの値でランダムな分布になるかを数値化したいと考えております。spatstatパッケージのKest関数、Lest関数を用いて、観察対象の点パターンを計算した結果と、完全にランダムな分布(CSR)から得られるプロファイルが交わる際のrの値が、pcf関数でCSRと比較した際に得られるrの値と倍くらい違うのですが、どういうことでしょうか?よろしくお願いいたします。
R2 (2015-09-01 (火) 10:29:46)
お世話になります。
従来は多重比較によってp-valueを求めて有意である、有意でないという考察で終えていたのですが、"compute.es"や"pwr"ライブラリーを用いて効果量や検出力の解析をしたいと考えました。
しかし、ヘルプファイルを見てみましたがいずれのライブラリーもTukeyやDunnetのような多重比較によって得られた統計値を使用することを想定していないようでした。
多重比較における効果量・検出力を算出する方法について知見をお持ちであればご教示頂けませんでしょうか。Rでそのようなライブラリーがないというのであれば、参考書や論文の情報でも構いません。
宜しくお願いします。
つなかん (2015-09-01 (火) 08:51:32)
お世話になります。ggplotってこんな図が苦手な気がします。facetとか使うと描けそうですけど、どうも見栄えがよくない。あえてggplot使うならどう描きますか?timeval = seq(as.POSIXct("2014-07-17 10:00:00"), by="30 sec", length=10) y1 = rnorm(10) y2 = rnorm(10)^10 y3 = rnorm(10) y4 = rnorm(10) par(mfrow=c(3,1)) par(mar=c(0,4,0,4)) par(oma=c(4,0,4,0)) plot(y1~timeval, type="l",ylab="y1(mm)", axes=F) axis(2); box() plot(y2~timeval, type="l", ylab="y2(g)", axes=F) axis(2); box() plot(y3~timeval, type="l", ylab="y3") lines(y4~timeval, type="l", col="red") legend("bottomright", legend = c("y3", "y4"), col=c("black", "red"), lty=1) mtext("Timeval", side=1, line=3, cex=0.8)
kirioh (2015-08-28 (金) 22:32:50)
はじめまして、お世話になります。
forecastパッケージを使った時系列データの分離(トレンド・季節変動・誤差成分)に失敗し続けています。
具体的にはA列に日付、B列に数値の入った以下のようなCSV形式の時系列データを用いて、
Date SP
2015/1/1 14360
2015/1/2 19908
2015/1/3 16210
2015/1/4 15465
2015/1/5 12514
2015/1/6 12182
※以下2015/7/31まで
以下のコードを試みたのですが、data = read.csv('test.csv',head=T, row.names=1) ts <- ts(data, start = c(2015,1), end = c(2015,7), frequency=365) stl <- stl(ts, s.window="per") stl(ts, s.window = "per") でエラー: 一変量系列だけが許されますというエラーが発生する状況です。またdecomposeを使っても
時系列の期間が無いか、2未満ですというエラーが発生します。 国内外のサイトで調べてdataをnumericで渡したり$indexを通したりと色々試したのですが、全く解決せず、恐れ入りますがこの条件から考えられる原因及び解決法をご教示くださいますでしょうか?
tsのclassは"ts"となっており、auto.arimaやacfは出力されはします。
ただtsをプロットすると2015.000からはじまったり、acfはlag軸の目盛りが0.00からはじまったり、不完全な状態です。
バージョンは3.1.2、OSはwindows 7になります。 何卒宜しくお願い致します。
Date SP 2015/1/1 14360 2015/1/2 19908 2015/1/3 16210 2015/1/4 15465 2015/1/5 12514 2015/1/6 12182 2015/1/7 11966またhead(data) すると以下になっています。
> head(data) SP 2015/1/1 14360 2015/1/2 19908 2015/1/3 16210 2015/1/4 15465 2015/1/5 12514 2015/1/6 12182start, endの指定についても私の誤認(YYYY,MM,DDだと思ってました)でした、ありがとうございます。 -- kirioh 2015-08-29 (土) 15:06:10
(2015-08-25 (火) 22:10:05)
お世話になっております。
2つのデータフレーム(共に十数万件で項目数100前後)のマージをmergeで試してみましたが、数分経っても結果は返ってきませんでした。
高速にマージしてくれるお薦めのライブラリがあれば教えてください。
a <- data.frame(id = 1:100000, as.data.frame(matrix(1:10000000, ncol = 100))) b <- data.frame(id = sample(1:100000, size = 100000), as.data.frame(matrix(1:10000000, ncol = 100)))というデータフレームが2つあったとして、
> head(a$id); head(b$id) [1] 1 2 3 4 5 6 [1] 24019 90410 60377 38469 66968 3732このidでmerge()してみると、
> system.time(ab <- merge(a, b, by = "id")) ユーザ システム 経過 0.644 0.016 0.660この通り。なお、
> system("cat /proc/cpuinfo | grep 'model name' |uniq") model name : Intel(R) Xeon(R) CPU W3550 @ 3.07GHz
> system.time(ab <- merge(a, b, by = "id")) ユーザ システム 経過 0.869 0.127 0.992 機種名: Mac Pro 機種 ID: MacPro5,1 プロセッサ名: Quad-Core Intel Xeon プロセッサ速度: 2.8 GHz プロセッサの個数: 1 コアの総数: 4 二次キャッシュ(コア単位): 256 KB 三次キャッシュ: 8 MB メモリ: 12 GB プロセッサ相互接続速度: 4.8 GT/s
df <- data.frame(id = I(sample(100001:200000,size=100000)), target=rep(c(0,1))) d1 <- subset(df,target==1) d0 <- subset(df,target==0) nm <- "id" w <- tapply(df$target,df[,c(nm)],mean) y <- tapply(d1$target,d1[,c(nm)],length) z <- tapply(d0$target,d0[,c(nm)],length) a <- data.frame(nm=I(names(w)),mn=w) b <- data.frame(nm=I(names(y)),c1=y) c <- data.frame(nm=I(names(z)),c0=z) d <- merge(a,b,by.x="nm",by.y="nm",all=T) e <- merge(d,c,by.x="nm",by.y="nm",all=T)
> ai <- a; ai$nm <- as.integer(ai$nm) > bi <- b; bi$nm <- as.integer(bi$nm) > ci <- c; ci$nm <- as.integer(ci$nm) > system.time(di <- merge(ai, bi, by = "nm", all = TRUE)) ユーザ システム 経過 0.345 0.000 0.345 > system.time(ei <- merge(di, ci, by = "nm", all = TRUE)) ユーザ システム 経過 0.322 0.008 0.330文字列型の場合
> ac <- a; ac$nm <- as.character(ac$nm) > bc <- b; bc$nm <- as.character(bc$nm) > cc <- c; cc$nm <- as.character(cc$nm) > system.time(dc <- merge(ac, bc, by = "nm", all = TRUE)) ユーザ システム 経過 0.864 0.000 0.864 > system.time(ec <- merge(dc, cc, by = "nm", all = TRUE)) ユーザ システム 経過 0.872 0.000 0.871文字列がキーだとちょっと時間がかかるね。しかし、いずれにしても1秒もかかりません。
> system.time(do.call("order", a[,1, drop=FALSE])) ユーザ システム 経過 76.086 0.520 82.530 > ai <- a; ai$nm <- as.integer(a$nm) > system.time(do.call("order", ai[,1, drop=FALSE])) ユーザ システム 経過 0.011 0.001 0.029 > ac <- a; ac$nm <- as.character(a$nm) > system.time(do.call("order", ac[,1, drop=FALSE])) ユーザ システム 経過 0.217 0.001 0.225 > af <- a; af$nm <- factor(a$nm) > system.time(do.call("order", af[,1, drop=FALSE])) ユーザ システム 経過 0.010 0.000 0.021AsIs の場合,とんでもない処理時間がかかっているのが分かります。
bx <- x[, by.x] if (is.factor(bx)) bx <- as.character(bx)のように as.character されるので,問題ないと思いますけど。AsIs が不都合なんですから... -- 河童の屁は,河童にあらず,屁である。 2015-08-28 (金) 08:20:48
su? (2015-08-23 (日) 13:00:26)
お世話になります。
列a,b,c,,,,を持つデータフレームdfの要素を引数とする関数を作製したいと思います。
hikisu1にa列、hikisu2にb列、hikisu3にc列を指定する場合func<-function(hikisu1, hikisu2, hikisu3){ }という関数を作製して、使用時に
func(df$a, df$b, df$c)としているのですが、これを、
func(a, b, c, data=df)というように、dfの要素を指定できるような関数に作り替えたい思います。
方法について、ご教示頂けますと幸いです。
(理由はdfの他の要素も修飾することを可能とするためです。)
func <- function(a, b, c, data=df) { name.a <- deparse(substitute(a)) name.b <- deparse(substitute(b)) name.c <- deparse(substitute(c)) name.data <- deparse(substitute(data)) str <- sprintf("data <- data.frame(%s$%s, %s$%s, %s$%s)", name.data, name.a, name.data, name.b, name.data, name.c) result <- eval(parse(text=str)) colnames(data) <- cbind(name.a, name.b, name.c) data }を定義すれば,使用例は以下のごとし。
df <- data.frame( a = 101:103, b = sample(10, 3), c = letters[21:23], d = c(1.4, 4.5, 7.9), e = c("abc", "foo", "bar") ) df ( x <- func(a, b, c, df) ) ( y <- func(d, e, a) )あなたの意図に合うのかな??
( x <- df[c("a", "b", "c")] ) ( y <- df[c("d", "e", "a")] )で,同じ結果を得ることも出来ます。
te (2015-08-20 (木) 21:59:32)
apply(df[1,1:dim(df)[2]],2,class) だと想定どおりの結果となりません。
numeric型のものがあるにも関わらず、すべてcharacter型と返ってきます。
どのように修正すればよいでしょうか。
> sapply(iris, class) Sepal.Length Sepal.Width Petal.Length Petal.Width Species "numeric" "numeric" "numeric" "numeric" "factor" > sapply(iris[1,1:dim(iris)[2]], class) Sepal.Length Sepal.Width Petal.Length Petal.Width Species "numeric" "numeric" "numeric" "numeric" "factor"
mappa (2015-06-30 (火) 15:29:08)
お世話になります。"Heatplus"ライブラリーの"regHeatmap"を用いて行列のデータをヒートマップにします。
以下のように実行するとファイル右側に表示されるカラーチャートの範囲が-2~1になりますが、この範囲を行列中の数値の範囲である1~100に対応させたいと考えました。
file_1.pdf
source("http://bioconductor.org/biocLite.R") biocLite("Heatplus") library(Heatplus) set.seed(123) data <- array(ceiling(runif(100,min=1,max=100)), dim=c(10,10)) colnames(data) <- rownames(data) <- 1:10 pdf(file="file_1.pdf") plot(regHeatmap(data, col=heat.colors)) dev.off()そこで、以下のようにbreaksでカラーチャートの範囲を指定したのですが、ヒートマップの色が白と赤のみになってしまいました。
file_2.pdf
set.seed(123) data <- array(ceiling(runif(100,min=1,max=100)), dim=c(10,10)) colnames(data) <- rownames(data) <- 1:10 pdf(file="file_2.pdf") plot(regHeatmap(data, col=heat.colors, breaks=seq(1,100,10))) dev.off()ヒートマップ化する行列の値とカラーチャートの色を一致させるにはどうすればよいでしょうか。"Heatplus"ライブラリーに限定せず、どんなライブラリーを使用しても構いません。環境はWindows 7の32bit、R 3.0.2です。
お手数ですが、ご回答宜しくお願いします。
kddoi (2015-06-29 (月) 20:34:11)
お世話になっております。関数内でのデータフレームの成分を参照したいのですが、with関数が思った通りの動作をしません。
attachとdetachを使えば上手く動くのですが、同一名の変数が存在する可能性などを考慮してできればwithを使いたいのですが、どのようにすればよろしいでしょうか?tmp1が想定していた書き方で、回避策がtmp2となっております。df <- data.frame(a=c(1,2,3), b=c(3,2,1)) tmp1 <- function(eq, dat) { return(with(dat, eq)) } tmp2 <- function(eq, dat) { attach(dat) d <- a+b detach(dat) return(d) } tmp1(a+b, df) tmp2(a+b, df)以上、よろしくお願いいたします。
tmp3 <- function(eq, dat) { eval(parse(text=paste("with(", deparse(substitute(dat)),",", deparse(substitute(eq)), ")"))) }
ちまっく (2015-06-08 (月) 03:50:53)
Rによる統計について。
当方、Rの初心者です。
Rによる「 T-検定 」を行いたい所存です。長文で失礼します。
元データが約5万あり、T-検定を行うため、データの加工を簡単に行える方法をお聞きしたいです。
元データは以下のような形です。
セッションID,アイテムID,大分類,小分類,ブランド,閲覧日時,購入の有無
6033,162429,日用品,歯ブラシ,647,43:06.0,0
6033,249019,雑貨,枕カバー,240,43:17.0,1
1003,169032,日用品,洗剤,340,21:34.0,0
1003,42543,日用品,歯ブラシ,205,25:55.0,0
1003,190788,日用品,洗剤,86,28:57.0,0
7062,154026,日用品,歯磨き粉,47,43:56.0,0
7062,30637,日用品,歯磨き粉,151,44:21.0,0
8011,168023,雑貨,プランター,150,44:52.0,0
8011,198903,雑貨,鉢,240,45:28.0,1
8011,157220,日用品,シャンプー,9,47:22.0,0
データを下データのように加工するための簡単な方法をお教えください。
セッションID毎に
大分類
・購入の場合、購入するまでに大分類上で何品閲覧したか
・非購入の場合、大分類上で何品閲覧したか
小分類
・購入の場合、購入するまでに小分類上で何品閲覧したか
・非購入の場合、小分類上で何品閲覧したか
滞在時間
・購入の場合、購入するまで何時間、分、秒、滞在したか(閲覧一番目で購入した際は、0:00で良いです。)
・非購入の場合、何時間、分、秒、滞在したか
このようなデータの形にしたい↓
大分類閲覧数(購入),大分類閲覧数(非購入)
2,1
1,1
小分類閲覧数(購入),小分類閲覧数(非購入)
2,2
2,1
滞在時間(購入),滞在時間(非購入)
0:11,7:23
0:00,0:25
以上です。
よろしくお願いします。
たけ (2015-06-03 (水) 20:56:34)
以下のように、データよって長さが変化するinputについて、
計算結果をリストに格納し、リストの各値に基づく集計をしたいと思います。
最後のsum以下の部分をinputの数に合わせて増減させる良い方法がありましたらご教授いただければ幸いです。
input <- c(10,20,30)#与えるデータの数はいつも3つではない。 list <- list(0) for(i in 1:length(input)){ list[[i]] <- input[i]/10} #任意の計算 sum(list[[1]],list[[2]],list[[3]])#ここをinputの長さに応じて変化させたい。なお、この例であればリストを展開してしまう方法もあると思いますが、実際の計算はリストの中にあるフォーマットは複雑で、sumではなく専用の関数なので、上記のようにリスト1からを並べて記述する必要があります。eval(parse(text="ここを工夫する"))などとしないといけないのではないかという所まで理解できています。
どうぞよろしくお願いします。
分分 (2015-05-27 (水) 17:39:05)
お世話になります。
以下のように英数字やスペース、記号からなる半角文字列を全角文字列に変換したいのですが、よい方法があればご教示ください。環境はWindows 7のR 3.0.2です。
a <- c("asdf","12 /_")
宜しくお願いします。
h <- "A-Za-z0-9~!@#$%^&*()_+`={}|[]\\:\";'<>?,./ -" # "-" は一番最後に指定 z <- "A-Za-z0-9~!@#$%^&*()_+`={}|[]\:”;’<>?,./ −" a <- c("asdf","12 /_") chartr(h, z, a)
> h <- "A-Za-z0-9~!@#$%^&*()_+`={}|[]\\:\";'<>?,./ " # 最後の - を取り除く > z <- "A-Za-z0-9~!@#$%^&*()_+`={}|[]\:”;’<>?,./ " # 最後の - を取り除く > a <- c("asdf","1-2 /_") > gsub("-", "−", chartr(h, z, a)) [1] "asdf" "1−2 /_"
cloud (2015-05-24 (日) 12:48:35)
お世話になります。
windows7及び8でR i386 3.2.0を使用しています。
clanはRODBCのみ使用しています。
デバイスはwin.print()を使用しています。
複数枚のグラフをループさせて1度に作成しています。
1枚ごとにdev.offしている為、plot関数を通る度にwindowsのプリンタダイアログが表示されて印刷ボタンをクリックしなければならない為、効率が良くありません。
これを回避して、印刷ボタンを1回クリックのみでグラフを連続印刷する方法をご存知ないでしょうか。
解説書や、webを調べたのですが、印刷については詳しい資料が見つからなくて困っています。解決策をご教示頂ければ幸いです。
gnu (2015-05-19 (火) 11:43:15)
お世話になります。
Windows7でgnupack_devel-12.03のemacsを使用しています。
ESSを使用したいと思い、
1 .emacs.d/site-lispにessフォルダを作成
2 同フォルダ内のess/lisp/ess-site.elの329行を
Rのインストール先に合わせて次のように変更
(setq-default inferior-R-program-name "C:/r/bin/i386/Rterm.exe")
3 init.elに次の行を追加
(require 'ess-site)
その上でemacsを再起動すると、次のようなメッセージが出て、ESSが機能しません。Warning (emacs): None of 'w32-short-file-name, 'win32-short- file-name, or 'mswindows-short-file-name are defined! You will have to manually set ess-program-files (in ess-custom.el) to the correct "8.3"-style directory name. Warning (initialization): An error occurred while loading `/home/.emacs.d/init.el': Symbol's function definition is void: w32-short-file-name ...ess-custom.elを調べてみたのですが、修正方法がわからず困っています。
解決策を御教示いただければ幸いです。
(setq ess-program-files "/c/R-3.2.0/bin/i386/Rterm.exe")すると、ワーニングが次の4行に減りました。
Warning (emacs): None of 'w32-short-file-name, 'win32-short-file-name, or 'mswindows-short-file-name are defined! You will have to manually set ess-program-files (in ess-custom.el) to the correct "8.3"-style directory name. ~また、M+X RでRが起動しました!しかし、次のようなメッセージが出て、 Rがうまく機能しません。
load ESSR: + + + + Error in file(filename, "r", encoding = encoding) : コネクションを開くことができません 追加情報: Warning message: In file(filename, "r", encoding = encoding) : ファイル '/home/.emacs.d/site-lisp/ess/etc/ESSR/R/.load.R' を開くことができません: No such file or directoryしかし、「.load.R」というファイルは確かに存在しています。 御陰様で、一歩前進しましたが、問題が残っている状況です。 -- gnu 2015-05-20 (水) 11:32:22
(setq ess-program-files "c:/GNUPAC~1.03/home/EMACS~1.D/SITE-L~1/ess/lisp/ess.el")しかし、4行のワーニングは相変わらず出てしまいます。 -- gnu 2015-05-21 (木) 11:21:18
tt (2015-05-14 (木) 13:14:39)
こんにちは。
zooのパッケージを最新のzoo_1.7-12に更新後、既存のプログラムで問題が起こるようになりました。とりあえず、旧バージョンに戻したいのですが、どうすべきがご教授頂けないでしょうか?
使用しているのは、Windows版R i386 3.1.3です。
よろしくお願いします。
たにし (2015-05-09 (土) 13:26:58)
3次元空間上の有向線分を始点/終点の座標を指定して表示し、あわせて当該有向線分に対するラベルを表示するにはどうしたらよいでしょうか。有向ですので単なる線ではなく矢印等の形になっていないと困ります。
ぷうや (2015-05-08 (金) 17:18:36)
glmmMLの実行結果のcallを、エクセルファイルに出力したいのです。やり方を教えてください。
> myResult <- glmmML(y ~ x1 + x2 + x3, family = "poisson", data = myData, cluster = myID) > myResult$call glmmML(formula = y ~ x1 + x2 + x3, family = "poisson", data = myData, cluster = myID)
この、"glmmML(formula = y1 ~ x1 + x2 + x3, family = "poisson", data = myData, cluster = myID)"をそのままテキスト化して、エクセルのシートの一つのセルにwrite.xlsx()を使って自動で書き込むコードを書きたいのです。クリップボードなどを経由する方法ではなく、指定したファイル名、シート名のエクセルシートに書き込む方法が知りたいです。ちなみに使用OSはMac OS 10.9.5です。よろしくお願いします。
myID <- factor(rep(1:20, rep(5, 20))) y <- rpois(100, lambda=2) x1 <- rnorm(100) x2 <- rnorm(100) x3 <- rnorm(100) myData <- data.frame(y, x1, x2, x3, myID) # ここまで,テストデータの用意 myResult <- glmmML(y ~ x1+x2+x3, family="poisson", data = myData, cluster = myID) # 以下の 3 行でファイルに出力 a <- as.character(myResult$call) # formula を character に b <- sprintf('%s(formula = %s, family = "%s", data = %s, cluster = %s)', # 文字列作成 a[1], a[2], a[3], a[4], a[5]) write.xlsx(b, file="foo.xlsx", sheetName="bar", # ファイルへ出力 col.names=FALSE, row.names=FALSE)
河童の屁は,河童にあらず,屁である。 (2015-04-22 (水) 13:45:58)
たまには私も質問したい。
以下のような内容の test.Rnw (エンコーディングは EUC-JP)<<>>= result <- matrix(1:4, 2) colnames(result) <- c("a", "ア") result @を,以下のようなファイルで Sweave 処理すると
#!/usr/bin/Rscript --vanilla Sweave("test.Rnw", encoding="euc-jp")できあがる test.tex の大きさが途方もなく大きくなる。
-rw-r--r-- 1 foo 503 1000187 4 22 13:33 test.texどんな風になっているか hexdump で見てみると
0000080 7d 0a 20 20 20 20 20 61 20 20 20 a5 a2 20 20 20 0000090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 * 00f42c0 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 5b 31となっており,* の部分に 20 がびっしりと詰まっている。
カタカナの列名を付けようとするとこのようなことが起こるようだ。<<>>= result <- matrix(1:4, 2) colnames(result) <- c("a", "b") result @だと,
-rw-r--r-- 1 foo 503 183 4 22 13:40 test.texで,何の問題もない。
何がいけないのか,回避策はあるのか。
\documentclass{jsarticle} \begin{document} <<echo=false>>= result <- matrix(1:4, 2) colnames(result) <- c("a", "ア") result @ \end{document}結果
\documentclass{jsarticle} \usepackage{Sweave} \begin{document} \begin{Schunk} \begin{Soutput} a ア [1,] 1 3 [2,] 2 4 \end{Soutput} \end{Schunk} \end{document}hexdumpの結果
$ hexdump -C test.tex 00000000 5c 64 6f 63 75 6d 65 6e 74 63 6c 61 73 73 7b 6a |\documentclass{j| 00000010 73 61 72 74 69 63 6c 65 7d 0a 5c 75 73 65 70 61 |sarticle}.\usepa| 00000020 63 6b 61 67 65 7b 53 77 65 61 76 65 7d 0a 5c 62 |ckage{Sweave}.\b| 00000030 65 67 69 6e 7b 64 6f 63 75 6d 65 6e 74 7d 0a 5c |egin{document}.\| 00000040 62 65 67 69 6e 7b 53 63 68 75 6e 6b 7d 0a 5c 62 |begin{Schunk}.\b| 00000050 65 67 69 6e 7b 53 6f 75 74 70 75 74 7d 0a 20 20 |egin{Soutput}. | 00000060 20 20 20 61 20 e3 82 a2 0a 5b 31 2c 5d 20 31 20 | a ....[1,] 1 | 00000070 20 33 0a 5b 32 2c 5d 20 32 20 20 34 0a 5c 65 6e | 3.[2,] 2 4.\en| 00000080 64 7b 53 6f 75 74 70 75 74 7d 0a 5c 65 6e 64 7b |d{Soutput}.\end{| 00000090 53 63 68 75 6e 6b 7d 0a 5c 65 6e 64 7b 64 6f 63 |Schunk}.\end{doc| 000000a0 75 6d 65 6e 74 7d 0a |ument}.| 000000a7
さくら (2015-04-22 (水) 13:40:23)
66avg のような数字が並んでいます。(csvのファイルになっています)
まず,数字からavgをとります
次に,上から3つずつ平均値を求めます.
方法を教えてください。
困っています。
x <- c("55avg", "66avg", "17avg", "62avg", "30avg", "69avg", "38avg", "91avg", "90avg", "34avg", "56avg", "78avg") colMeans(matrix(as.numeric(sub("avg", "", x)), 3))
colMeans(matrix(as.numeric(sub("avg", "", as.character(x[,1]))), 3))としないとだめだね。
Pikyu (2015-04-21 (火) 20:26:33)
お世話になります。pdf()で横幅の広い画像を保存したいのですが、widthが200を超えると保存されたファイルが真っ白になってしまいます。pdf(file="abc1.pdf", width=200, height=7) plot(1:10) dev.off() pdf(file="abc2.pdf", width=201, height=7) plot(1:10) dev.off()この現象を回避するにはどうすべきでしょうか。環境はWindows 7 64bit, R3.1.2です。
よろしくお願いします。
lm(Volume ~ A-3, data = x)このような列名を含むdataではどのように説明変数を指定すればよいのでしょうか。
以下にエラー plot.new() : figure margins too largeが出るでしょう?ということなんでしょうかね。そうね。そりゃそうだわ。縦横比がでたらめなんだもの。
pdf(file="abc2.pdf", width=2, height=0.07) old <- par(mar=0.01*c(3,3,1,1)) x <- seq(0, 100*pi, length=1000000) y <- sin(x) plot(x, y, cex=0.005, xaxt="n", yaxt="n") par(old) dev.off()または,
pdf(file="abc2.pdf", width=2, height=0.07) old <- par(mar=0.01*c(3,3,1,1)) plot(c(0, 2), c(0, 0.07), type="n", xaxt="n", yaxt="n") text(0, 0.035, paste(rep("1234567890", 100), collapse=""), cex=0.1) par(old) dev.off()あ,ごめんごめん,質問者の方へ
sawako (2015-04-21 (火) 08:43:20)
初めまして。
初歩的な質問で恐縮です、ヒントでもいいので教えていただければ幸いです。
よろしくお願いいたします。
survplotを用いてカプランマイヤー曲線にn.at.riskの表をいれようとrmsパッケージをダウンロードしました(「パッケージ ‘rms’ は無事に展開され、MD5 サムもチェックされました」の表記確認)。
「 関数 "survplot" を見つけることができませんでした」のエラーメッセージが出てしまいます。
ネット上でいろいろ調べて「library(rsm)」「library(survplot)」などのコマンド入力しているような記述もあったのですが、どちらも「’ ’という名前のパッケージはありません」と出てきてしまいます。
またlibrary(survival)は実行済みです。
お知恵を貸していただきたく思います。よろしくお願いいたします。
うま (2015-04-14 (火) 17:58:19)
連日失礼します。
▼サンプル識別ID,視聴時間,性別 A,1,men A,2,men A,3,men B,4,men B,5,men B,6,men B,7,men C,8,women C,9,women D,10,women▼求める結果
A,6,men B,22,men C,17,women D,10,womenさらにここから散布図を作りたいと思っています。
(男性女性別にどこに集中しているのかの傾向を見たいと思っています。
今、下記サイトを見ながらトライしているのですが、一日かけても導き出せず。
http://sssslide.com/www.slideshare.net/abicky/r-10128090
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/43.html
どうぞよろしくお願いします!
> d <- as.data.frame(t(sapply(split(a, a$識別ID), function(d) + list(as.character(d$識別ID[1]), sum(d$視聴時間), + as.character(d$性別[1]))))) > d <- data.frame(matrix(unlist(d), ncol=3)) > d[,2] <- as.numeric(d[,2]) > d X1 X2 X3 1 A 4 men 2 B 3 men 3 C 2 women 4 D 1 women散布図ってどんなの?横軸に性別縦軸に視聴時間というのなら,
plot.default(d[,3], d[,2], pch=19)で,描けるでしょ。
うま (2015-04-13 (月) 19:43:22)
お世話になります。
Rで以下の式を計算しようとしているのですが、ちょうどよい方法が見つかりません。
マージ関数やsumif関数などを利用したのですが、上手くいかなく思案しています。識別ID,視聴時間,性別 A,1,men A,2,men A,3,men B,4,men B,5,men B,6,men B,7,men C,8,women C,9,women D,10,women求める結果
men sum=28, ave=14 women sum=27, ave=13.5識別IDは同一だと同じ人であることを指しています。
上記のサンプルでいうと視聴者は4人ということになります。
マージやsumifなどでは上手くいかないものなのでしょうか?
ヒントだけでもお願い致します。
> sapply(split(a, a$性別), function(b) c(sum(b$視聴時間), sum(b$視聴時間)/length(levels(factor(b$識別ID))))) men women [1,] 28 27.0 [2,] 14 13.5うまい方法より,確実な方法を求めるべし。 -- 河童の屁は,河童にあらず,屁である。 2015-04-13 (月) 23:27:16
> (t4person <- aggregate(視聴時間 ~ 性別 + 識別ID, data = a, FUN = sum)) 性別 識別ID 視聴時間 1 men A 6 2 men B 22 3 women C 17 4 women D 10 > (tsum4sex <- aggregate(視聴時間 ~ 性別, data = t4person, FUN = sum)) 性別 視聴時間 1 men 28 2 women 27 > (tmean4sex <- aggregate(視聴時間 ~ 性別, data = t4person, FUN = mean)) 性別 視聴時間 1 men 14.0 2 women 13.5-- 名無し 2015-04-14 (火) 21:42:51
ぺぃにゃん (2015-04-11 (土) 14:54:36)
お世話になります。
RGuiのコンソール画面で幾つかパッケージを呼び出して作業を行い、途中で作業を終え一旦終了する際にワークスペースの保存を選択すると次回起動時にオブジェクトの情報が再現されそこから作業を再開する事が出来ます。
この時それまで使用していたパッケージもロード済みの状態で作業が再開出来ると面倒がなくて良いのですが何かいい方法はございますでしょうか?
保存する際にオプションがある、もしくはパッケージの情報は別で保存しておいて別のコマンドで一気に呼び出してロードするなどございましたらご示唆よろしくお願いします。
かず (2015-04-11 (土) 13:53:34)
お世話になります.
自作関数内で,nlmeパッケージのgls関数を呼び出したいのですが,library(nlme) myfunc <- function(data, y, group, time, id, cov) { outcome <- deparse(substitute(y)) group <- deparse(substitute(group)) time <- deparse(substitute(time)) cov <- deparse(substitute(cov)) form <- paste(outcome,'~ as.factor(', group,')+as.factor(',time,')+as.factor(', group,'):as.factor(',time,')',cov) id <- deparse(substitute(id)) res <- gls(as.formula(form), data=data, corr=corSymm(form=~1|id), weights=varIdent(form=~1|time)) return(res) } myfunc(BodyWeight,weight,Diet,Time,Rat, )上記の実行で,
gls(weight~Time+Diet, data=BodyWeight, corr=corAR1(form=~1|Rat), weights=varIdent(form=~1|Time))の結果を得ることを意図しているのですが,myfunc関数の引数であるidとtimeをmyfunc関数内でgls関数に渡す方法がわかりません.
deparse関数で文字列になってしまっているからなのかとも思いますが,そのままidと書いても駄目のようです.
ご教示のほどよろしくお願いいたします.
gls(weight~as.factor(Time)+as.factor(Diet), data=BodyWeight, corr=corAR1(form=~1|Rat), weights=varIdent(form=~1|Time)) # 投稿法を良く読むように!!!の間違いです.よろしくお願いいたします. -- かず 2015-04-11 (土) 16:34:35
けい (2015-04-06 (月) 15:39:48)
いつも参考にさせていただいております。
今回の質問は、温度表示の「℃」についてです。
日本語変換の「℃」では文字化けすることもありうるので、英語表現にしていますが、lab = expression (paste("Temperature", "(", ~degreeC, ")" )) text(0.5, 0.5, lab)で表示させると、上付きの○部分がCと同じ大きさになってしまい、バランスが悪いです。「℃」のような表現ができればいいのですが。
○部分を小さくすることは可能でしょうか。
よろしくお願いいたします。
TGI (2015-04-06 (月) 08:25:40)
stripchart()の右側のy軸に異なる目盛を作り、abline()で線を追加したいのですが、以下のように実行すると右側のy軸の範囲が左側のy軸の範囲に設定されてしまいます。y <- -10:9 x <- factor(rep(1:2, 10)) stripchart(y~x, vertical=TRUE) abline(h=3, col="red", lwd=2, lty="solid", ylim=c(0,10), xaxt="n", yaxt="n") axis(side=4, at=seq(0, 10, by=2))そこで、以下のようにabline()の前にstripchart()でプロットを仮作成するとうまくいくのですが、もっとスマートな方法はないでしょうか。
y <- -10:9 x <- factor(rep(1:2, 10)) stripchart(y~x, vertical=TRUE) par(new=TRUE) stripchart(0, xaxt="n", yaxt="n", ylim=c(0, 10), col="white") abline(h=3, col="red", lwd=2, lty="solid", ylim=c(0, 10), xaxt="n", yaxt="n") axis(side=4, at=seq(0, 10, by=2))宜しくお願いします。
y <- -10:9 x <- factor(rep(1:2, 10)) stripchart(y~x, vertical=TRUE) abline(h=(57-100)/10, col="red", lwd=2, lty="solid") axis(side=4, at=seq(-10, 9, length=11), labels=0:10)このように,グラフの座標系と軸の座標系が一致しない場合には,いちいち換算してやらないといけないので,par(new=TRUE) を使う方法が勧められるでしょう。 -- 河童の屁は,河童にあらず,屁である。 2015-04-06 (月) 11:38:33
help (2015-04-05 (日) 10:17:32)
初歩的な質問で申し訳ありません.
例えば,irisであれば,iris[,-1]とすれば,一列目が削除されたデータフレームができます.
これは行につても使えると,どこかで書いたあった記憶があるので,iris[-1,]としても1行目が消えません.そこで,例えば,miris=as.matrix(iris)とやってからmirisに同じことをやると一行目が消えます.dataframeには[-1,]の手法が使えないのでしょうか.
8 (2015-04-03 (金) 09:16:24)
お世話になります。beeswarm()を使用しているのですが、以下のようにサンプル数に応じて出力する画像ファイルを大きくすると、グラフ枠から最初と最後のサンプルまでの横軸方向のスペースが大きくなってしまいます。library(beeswarm) pdf(file="iris.pdf",width=5,height=7) beeswarm(Sepal.Length~Species, iris) dev.off() iris2 <- rbind(iris,iris,iris,iris,iris) iris2[5] <- rep(c(letters,LETTERS),100)[1:nrow(iris2)] pdf(file="iris2.pdf",width=35,height=7) beeswarm(Sepal.Length~Species, iris2) dev.off()
このスペースを小さくするにはどうしたらよいでしょうか。環境はR 3.1.2のwindows 7です。
宜しくお願いします。
if (horizontal) { if (is.null(ylim)) ylim <- glim if (is.null(xlim)) { xlim <- dlim } 略 } else { # vertical if (is.null(xlim)) xlim <- glim if (is.null(ylim)) { ylim <- dlim } 略 }
NNDDMMCC (2015-03-31 (火) 19:35:51)
お世話になります。
カイ二乗値がとても大きい時に「1-pchisq」を計算すると,0と表示されてしまいますが,それを1.0e-20といったように,表示する方法はありますでしょうか?具体的には,> 1-pchisq(70,1) [1] 1.110223e-16 #1.0e-16まではしっかりと表示されますが > 1-pchisq(71,1) [1] 0 #それより小さくなるとすべて0になってしまうようです。といったことを解消したいのですが,どうぞよろしくお願いいたします。
> 1-pchisq(70, 1) # 「しっかりと表示されますが」とはいうものの,正確な値ではないのです。 [1] 1.110223e-16 > pchisq(70, 1, lower.tail=FALSE) # このようにすれば,正確な値が表示されます。 [1] 5.930446e-17 > 1-pchisq(71, 1) [1] 0 > pchisq(71, 1, lower.tail=FALSE) # このような場合についても同じです。 [1] 3.572249e-17もっとも,検定に対して用いる場合は,P 値はせいぜい小数点以下 3 桁までで十分なので,*e-8 だろうと,*e-11 だろうと,問題はないのですけどね。
たかし (2015-03-29 (日) 13:44:17)
以下のURLは今月の3月4日に行われた競輪のレースの出走表です。
http://keirin-station.com/keirindb/race/member/36/20150304/1/
この出走表から個々の選手の競争得点の標本分散を計算します。
次に以下のURLはその結果です。
http://keirin-station.com/keirindb/race/result/36/20150304/1/
ここから3連単の配当金をとってきます。
見たい関係は競争得点の標本分散と3連単の配当金なのですが、この2つの数の組を同様に違うレースから約300レースとってきたいのですが、これらはこのホームページの出走表にいちいちアクセスしてとってくるしか方法がないのでしょうか?何か効率的なやり方はありますか?
XXX (2015-03-27 (金) 18:10:29)
お世話になります。lapply()に自作の関数を渡して処理をする際に、返り値が画面に表示されないようにしたいのですが、invisible()が機能しないようです。mysum <- function(x) { invisible(a <- sum(x)) } x <- 1:5 mysum(x) # 返り値は表示されない x <- c(list(1:5), list(2:6)) lapply(x, mysum) # 返り値が表示されてしまうどのようにすればよいでしょうか。
宜しくお願いします。
mysum <- function(x) { invisible(sum(x)) # 代入してから返す必要はない } x <- 1:5 mysum(x) # 返り値は表示されない x <- list(1:5, 2:6) # データ構造としてはこちらが自然(ベクトルを要素として持つリスト) y <- sapply(x, mysum) # この場合は sapply がよいだろう。 # 結果を何かに代入してやればよいだけ(そういう意味では invisible ではなく return で十分) # そもそも,代入もしない,出力もしないというのでは,何のための関数? # 回避策があるなら,不本意でもそれを使う y # 必要なときに表示すればよいだけ(不要なら表示しないだけ)
月野 (2015-03-25 (水) 14:45:04)
初めて投稿させていただきます。win7 64bitで、R3.1.2を使用していたところ、先日突然、コンソールのメッセージが全て英語になり、日本語を入力しても文字化けするようになってしまいました。これまで対応として試みたのは
・Rconsole 内の のlanguage = ja_JP.UTF-8 に上書き
・Sys.setenv での変更> Sys.setenv(LANG = "fr") > x Erreur : objet 'x' introuvable > Sys.setenv(LANG = "ja_JP.UTF-8") > x Error: object 'x' not found > Sys.setenv(LANG = "en") > x Error: object 'x' not foundになります。R3.1.3をインストールしても同じ症状が継続して出ています。対処方法を御教示いただけますでしょうか。よろしくお願いします。
> Sys.setlocale(locale="Japanese")
# 実行結果などをどのように記述するかは,他の投稿記事をみるとか,投稿書式についての説明を読むとかしてほしいものです > Sys.setlocale(locale="Japanese") [1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932; LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932" > Sys.setenv(LANG = "Japanese_Japan.932") > x Error: object 'x' not found
1.「コントロール パネル\時計、言語、および地域」の「管理」タブ内の「Unicode対応ではないプログラムの言語」が「日本語(日本)」になってるか確認. 2.「C:\Program Files\R\R-3.1.3\etc\Rconsole」の中のlanguage = が無指定(ブランク)か確認. 3. ご自分の「C:\Users\<ユーザー名>\Documents\Rconsole」の中のlanguage = が無指定(ブランク)か確認. 4. 上記が問題なければ普通にRを起動して、sessionInfo()の結果をはりつける. > sessionInfo() 5. cmdを実行して環境変数の一覧を取得してはりつける. C:\xxxx> set > env.txtそんなもんかぁ -- なかま 2015-03-27 (金) 16:09:40
NwFc (2015-03-22 (日) 20:48:16)
初めて投稿させて頂きます.ルールが余りわからず失礼があればお許しください. ← プログラム等をどうやって入力するか,ソースを見るべし
Rで重回帰をしようとして,予測のところで躓いています.初歩的な理解不足と思いますが,どなたか,私が何を勘違いしているかを御教え頂けると嬉しいです.
やりたいことはデータを与えてlmで重回帰式求め,新しいデータでyを予測するというものです.単回帰の場合はうまくいくのですが,説明変数xを二つにすると,predictで素直に計算してくれず,元データの行数と合わないなとど,警告がでます.xの一組のペア(50,50)でyを予測してほしいだけなのですが.
predictは重回帰では使えず,係数を求めて自分でベクトル演算するしかないのでしょうか? どなたか助けてください.> x1 <- c(30, 20, 60, 80, 40, 50, 60, 30, 70, 60) > x2 <- c(30, 50, 60, 80, 40, 30, 60, 30, 40, 60) > x <- cbind(x1, x2) > a <- as.matrix(c(2, 5)) > y <- x %*% a > > z <- lm(y ~ x) > new <- data.frame(x1 = 50, x2 = 50) > predict(z, new) 1 2 3 4 5 6 7 8 9 10 210 290 420 560 280 250 420 210 340 420 Warning message: 'newdata' had 1 row but variables found have 10 rows
> z <- lm(y ~ x1 + x2) > new <- data.frame(x1 = 50, x2 = 50) > predict(z, new) 1 350なお、yは次のように作成すると1行ですむ。y, x1, x2だけあればy ~ x1 + x2の回帰分析ができるので、xは不要。
> y <- 2 * x1 + 5 * x2
Lee (2015-03-17 (火) 20:05:19)
たびたびすみません。再び質問させて頂きます。 # 「すいません」などという日本語はありません
複数の文字列を要素にもつリストxから、文字列ベクトルyの要素を削除して、リストzを作りたいと考えています。(x <- list(c("Aaa","Abb","Acc"), c("Baa","Bcc","Bds","Bas"), c("dsfa","fgsd","gtsd","frgh"))) y <- c("Acc", "fgsd") (z <- list(c("Aaa","Abb"), c("Baa","Bcc","Bds","Bas"), c("dsfa","gtsd","frgh")))どのような処理をすれば可能でしょうか。使えそうな関数でもよいので教えて頂けませんか。
宜しくお願いします。
> z # このような結果が欲しいのですね [[1]] [1] "Aaa" "Abb" [[2]] [1] "Baa" "Bcc" "Bds" "Bas" [[3]] [1] "dsfa" "gtsd" "frgh" > lapply(x, function(a) a[!(a %in% y)]) # プログラムは,この一行で十分 ! の後に( )を余分につけた [[1]] [1] "Aaa" "Abb" [[2]] [1] "Baa" "Bcc" "Bds" "Bas" [[3]] [1] "dsfa" "gtsd" "frgh"
Lee (2015-03-16 (月) 15:47:44)
お世話になります。
以下のような2×3の行列を要素にもつリストがあり、rbindで6×3の行列にします。list_dat <- list(matrix(1:6, nrow=2, ncol=3),matrix(7:12, nrow=2, ncol=3),matrix(13:18, nrow=2, ncol=3)) rbind(list_dat[[1]],list_dat[[2]],list_dat[[3]])
本当のデータはもっとたくさんの要素を持つので、この処理をlapply()やsapply()で実行しようとしたのですが結合した行列が作れません。どのようにすればよいでしょうか。
よろしくお願いします。
> Reduce(rbind, list_dat) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 [3,] 7 9 11 [4,] 8 10 12 [5,] 13 15 17 [6,] 14 16 18
> result = NULL > for (i in list_dat) { + result <- rbind(result, i) + } > result [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 [3,] 7 9 11 [4,] 8 10 12 [5,] 13 15 17 [6,] 14 16 18
コバヤシカズオ (2015-03-12 (木) 16:33:43)
お世話になります。グループ毎にoneway.testを実行したく,下記例を
インターネットで見つけました。
data %>% group_by(AAA,BBB) %>% do(hensu=lm(Y~X,data=.))
真似をして,下記で実行したところエラーとなりました。
data %>% group_by(CCC) %>% do(oneway=oneway.test(YY~XX,deta=.))Error in oneway.test(YY~XX, data= .SD) : not enough groupsCCCの中に複数のカテゴリー(文字)は確認しました。
基本的な使用方法の間違いでしょうか。ご指導戴けると幸いです。R3.1.2 Windows8
FK (2015-03-12 (木) 09:49:07)
お世話になります。以下のようなデータフレームxの要素をひとつのベクトルに変換したいのですが、何かよい方法はないでしょうか。要素の順番はどうでも構いません。as.vector()ではできませんでした。
宜しくお願いします。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) )
> x$SEX <- as.character(x$SEX) > unlist(x) SEX1 SEX2 SEX3 SEX4 SEX5 HEIGHT1 HEIGHT2 HEIGHT3 HEIGHT4 HEIGHT5 "F" "F" "M" "M" "M" "158" "162" "177" "173" "166" WEIGHT1 WEIGHT2 WEIGHT3 WEIGHT4 WEIGHT5 "51" "55" "72" "57" "64"名前付きベクトルが嫌であればunname()を使えばいいです
> unname(unlist(x)) [1] "F" "F" "M" "M" "M" "158" "162" "177" "173" "166" "51" "55" [13] "72" "57" "64"
okh (2015-03-10 (火) 11:28:18)
統計数理研究所のDecompとRのdecompose関数は同じ計算法なんでしょうか?最近出版された「楽しいR」という本の59ページを読んでいて気になったのですが。どなたか知ってますでしょうか。
Montecarlo (2015-03-08 (日) 22:56:02)
いつもお世話になっております。
質問が2件ありますので、お答えいただけたら幸いです。
・Wiki内検索について
本Wiki内の検索を一番下のGoogle検索窓からWiki内を検索しましたが
いくつか「有効なWikiNameではありません」と表示されて、検索がうまくいっていないようです。
この解決策をご存知の方がいらっしゃいましたら、教えていただけたらと思います。
・画像の添付について
トップページには以下のように書かれていました。
> 各ページへのファイル添付については、ページ上部の「ファイル添付」より、画像ファイルのみユーザー認証なしで可能としてあります。その他のファイルの添付はユーザー認証することで可能です。
しかしながら、添付しようとすると「管理者パスワードが一致しません。」と出てしまい、添付ができませんでした。
添付の具体的な方法を教えていただけたらと思います。
よろしくお願いいたします。
NNDDMMCC (2015-03-04 (水) 14:15:42)
お世話になります。
R version 3.1.1 (2014-07-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
OS:windouws 7
でメタ解析をmeta packageを用いて行っております。
そのなかで,metabinを用いて以下のようなプログラムを実行しました。X <- matrix(c(1282, 1890, 1368, 2426, 1749, 2606, 1462, 2536), 2, 4, byrow=TRUE) res <- metabin(X[,1], X[,2], X[,3], X[,4], sm="OR", comb.fixed=TRUE) res$pval.fixedとしてfixed effect modelのp値を表示しようとしたのですですが,数字が小さすぎて"0"と表示されてしまいます。
とても小さい値(おそらく1.0E-16以下だと思います)を表示するにはどうすればよろしいでしょうか。
どうぞよろしくお願いいたします。
> sprintf("%A", res$pval.fixed) [1] "0X0P+0" > sprintf("%A", 0) [1] "0X0P+0"なので,これは正真正銘の 0 ですね。 -- 河童の屁は,河童にあらず,屁である。 2015-03-04 (水) 14:42:34
HA (2015-02-28 (土) 21:57:05)
お世話になります。
Rを始めて3ヶ月、プログラミングはRが初めて、という者です。
環境は
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
OS:Windows 7 professional
です。
アンケートの分析で、ロジット(将来的にはプロビットも)分析を行い、step関数のステップワイズ法で変数選択をしようとしています。
目的変数にあたる項目が複数あり、将来的に似たような分析をすることなどから、一連の操作を一つの関数にまとめておきたいと考えました。
そして以下のような関数を作りました(エラーに関係しない部分は省いております)y = runif(100) > 0.3 #テストデータ x1 = runif(100) x2 = runif(100) x3 = runif(100) x4 = runif(100) t.d = data.frame(y,x1,x2,x3,x4) obj = y~. null = y~ 1 t.func = function(obj, null, family = binomial, #関数本体 data, direction = "both"){ on.exit(sink()) sink("test.txt") rg1 = glm(obj,family ,data) rg2 = glm(null,family ,data) step(rg1, scope = list(upper = rg1, lower = rg2), direction = direction) } t.func(obj, null,data = t.d)これを実行すると、
「Error in UseMethod("family") : no applicable method for 'family' applied to an object of class "NULL"」というエラーメッセージが出て、停止してしまいます。
1行ずつreturnで結果を返していったところ、stepの部分でエラーが出ているようなのですが、familyはstepの引数に含まれていないので、どうすればいいのか見当がつきません。
directionを"backward"にすれば動くのですが、できればステップワイズ法(direction = "both")でも結果を得たいと考えています。
本サイトでは、glmで検索した結果と「Rの関数定義の基本」については目を通しましたが、解決に繋がると理解できるものはありませんでした。
(「Rの関数定義の基本」の「引数として関数オブジェクトを与える場合」は関連するかと思ったのですが、理解できませんでした)
どうかご助言よろしくお願いいたします。
set.seed(20206) n = 40 y = runif(n) > 0.3 #テストデータ x1 = rnorm(n) x2 = rnorm(n) x3 = rnorm(n) x4 = rnorm(n) t.d = data.frame(y, x1, x2, x3, x4) t.func = function(y, x, family = binomial, direction = "both") { on.exit(sink()) sink("test.txt") rg1 = glm(y ~ x, family) step(rg1, direction = direction) # モデルの範囲を指定する必要はないと思われるので } t.func(t.d[,1], as.matrix(t.d[2:5])) # 第1引数は従属変数ベクトル,第2引数は独立変数行列,第3以降はf amily, direction を指定できる
# seed=sample(100000, 1) set.seed(9475) # print(seed) n = 40 yy = runif(n) > 0.3 #テストデータ x1 = rnorm(n) x2 = rnorm(n) x3 = rnorm(n) x4 = rnorm(n) t.d = data.frame(yy, x1, x2, x3, x4) t.func = function(y, x, link=c("logit", "probit"), direction = "both") { # on.exit(sink()) # sink("test.txt") link = match.arg(link) d = data.frame(y, x) formula1 = as.formula(sprintf("%s ~ .", colnames(d)[1])) rg1 = glm(formula1, family=binomial(link=link), data=d) formula2 = as.formula(sprintf("%s ~ 1", colnames(d)[1])) rg2 = glm(formula2, family=binomial(link=link), data=d) step(rg1, scope = list(upper = rg1, lower = rg2) , direction = direction) } t.func(t.d[1], t.d[2:5]) # 第1引数は 1 列のデータフレーム(t.d[, 1]ではない),第2引数は独立変数のデータフレーム,第3以降は link, direction を指定できる t.func(t.d[1], t.d[2:5], link="probit", direction="backward")実行例1
> t.func(t.d[1], t.d[2:5]) # 第1引数は... Start: AIC=39.64 yy ~ x1 + x2 + x3 + x4 Df Deviance AIC - x2 1 29.679 37.679 <none> 29.636 39.636 - x1 1 32.109 40.109 - x4 1 35.722 43.722 - x3 1 37.178 45.178 Step: AIC=37.68 yy ~ x1 + x3 + x4 Df Deviance AIC <none> 29.679 37.679 - x1 1 32.123 38.123 + x2 1 29.636 39.636 - x4 1 35.948 41.948 - x3 1 37.239 43.239 Call: glm(formula = yy ~ x1 + x3 + x4, family = binomial(link = link), data = d) Coefficients: (Intercept) x1 x3 x4 2.1681 0.5991 1.3290 -1.4805 Degrees of Freedom: 39 Total (i.e. Null); 36 Residual Null Deviance: 40.03 Residual Deviance: 29.68 AIC: 37.68実行例2
> t.func(t.d[1], t.d[2:5], link="probit", direction="backward") Start: AIC=40.81 yy ~ x1 + x2 + x3 + x4 Df Deviance AIC - x2 1 30.815 38.815 - x1 1 32.370 40.370 <none> 30.813 40.813 - x4 1 36.481 44.481 - x3 1 37.109 45.109 Step: AIC=38.81 yy ~ x1 + x3 + x4 Df Deviance AIC - x1 1 32.392 38.392 <none> 30.815 38.815 - x4 1 36.583 42.583 - x3 1 37.154 43.154 Step: AIC=38.39 yy ~ x3 + x4 Df Deviance AIC <none> 32.392 38.392 - x4 1 36.744 40.744 - x3 1 37.532 41.532 Call: glm(formula = yy ~ x3 + x4, family = binomial(link = link), data = d) Coefficients: (Intercept) x3 x4 1.1263 0.5115 -0.5909 Degrees of Freedom: 39 Total (i.e. Null); 37 Residual Null Deviance: 40.03 Residual Deviance: 32.39 AIC: 38.39
Montecarlo (2015-02-22 (日) 23:37:30)
いつもお世話になっております。
今回引数の確認について質問をさせていただきます。
関数の中で関数を定義し、その関数が調べることが可能かの疑問があります。
具体的には以下の事象です。
以下のプログラムを走らせるとDist.norm <- function(arg.m, arg.sd){ return( list( random = function(n) rnorm(n, arg.m, arg.sd) , mean = arg.m , density = function(x) dnorm(x, arg.m, arg.sd) ) ) } TestFunction <- Dist.norm(2, 3) TestFunction set.seed(0);TestFunction$random(3);set.seed(0);rnorm(3, 2, 3) TestFunction$density(0.3); dnorm(0.3, 2, 3)このように返ってきます。
> Dist.norm <- function(arg.m, arg.sd){ + return( + list( + random = function(n) rnorm(n, arg.m, arg.sd) + , mean = arg.m + , density = function(x) dnorm(x, arg.m, arg.sd) + ) + ) + } > > TestFunction <- Dist.norm(2, 3) > TestFunction $random function (n) rnorm(n, arg.m, arg.sd) <environment: 0x00000000295e3d18> $mean [1] 2 $density function (x) dnorm(x, arg.m, arg.sd) <environment: 0x00000000295e3d18> > set.seed(0);TestFunction$random(3);set.seed(0);rnorm(3, 2, 3) [1] 5.788863 1.021300 5.989398 [1] 5.788863 1.021300 5.989398 > TestFunction$density(0.3); dnorm(0.3, 2, 3) [1] 0.1132558 [1] 0.1132558こちらが意図とした通り、乱数と平均および密度が求まっています。
しかしながら、以下の状態では「arg.m」「arg.sd」へ何が入っているかわからない状態です。> TestFunction$random function(n) rnorm(n, arg.m, arg.sd) <environment: 0x00000000295e3d18>この「arg.m」「arg.sd」を取得する方法はありますでしょうか。
具体的には、上記の例で「arg.m = 2」「arg.sd = 3」を取得したいです。
皆さんのお知恵を拝借できればと思います。
どうぞよろしくお願いいたします。
density = function(x) c(dnorm(x, arg.m, arg.sd), arg.m, arg.sd)というように定義しておけば,dnorm の戻り値と,arg.m, arg.sd の 3 つが戻りますけど?
> TestFunction$density(0.3) [1] 0.1132558 2.0000000 3.0000000c ではなく list で返してやってもよいでしょう。
density = function(x) list(density=dnorm(x, arg.m, arg.sd), arg.m=arg.m, arg.sd=arg.sd)としておけば,
> TestFunction$density(0.3); dnorm(0.3, 2, 3) $density [1] 0.1132558 $arg.m [1] 2 $arg.sd [1] 3お好きな方を。 -- 河童の屁は,河童にあらず,屁である。 2015-02-23 (月) 04:18:52
-- Montecarlo 2015-02-23 (月) 06:50:55
konoushi (2015-02-22 (日) 17:13:59)
平素よりお世話になっております。
下記のようなテーブルを以下のように変形したいのです。
どのようにすればよいでしょうか。id StartYear EndYear Variable 01 2000 2002 a 02 1995 1997 b id Year Variable 01 2000 a 01 2001 a 01 2002 a 02 1995 b 02 1996 b 03 1997 b # 変なところに投稿しないように 投稿法も学習すること
d <- structure(list(id = c(1L, 2L, 30L), StartYear = c(2000L, 1995L, 2010L), EndYear = c(2002L, 1997L, 2015L), Variable = structure(1:3, .Label = c("a", "b", "c"), class = "factor")), .Names = c("id", "StartYear", "EndYear", "Variable"), class = "data.frame", row.names = c(NA, -3L)) d n <- d$EndYear - d$StartYear + 1 d2 <- NULL for (i in 1:nrow(d)) { d2 <- rbind(d2, cbind(rep(d[i,1], n[i]), seq(d[i, 2], d[i, 3], length=n[i]), rep(as.character(d[i,4]), n[i]))) } d2 <- data.frame(d2) colnames(d2) <- c("id", "Year", "Variable") d2$id <- as.integer(as.character(d2$id)) d2$Year <- as.integer(as.character(d2$Year)) d2実行結果
> d id StartYear EndYear Variable 1 1 2000 2002 a 2 2 1995 1997 b 3 30 2010 2015 c > d2 id Year Variable 1 1 2000 a 2 1 2001 a 3 1 2002 a 4 2 1995 b 5 2 1996 b 6 2 1997 b 7 30 2010 c 8 30 2011 c 9 30 2012 c 10 30 2013 c 11 30 2014 c 12 30 2015 c
risperidone (2015-02-20 (金) 10:20:50)
お世話になります。例えば下記のようなデータがあったとします。
1:ANA 2:JAL 3:ANA, JAL 4:JAL,ANA, DEL
それぞれの構成要素をカウントすると、ANA 3, JAL 3, DEL 1となります。このように構成要素の数をRでカウントする手法があればご教授下さい。宜しくお願いします。
ANA JAL ANA, JAL JAL,ANA, DELのようなファイル(test.dat)があって,それを readLines で読み込んだ場合ならば,
x <- readLines("test.dat") table(unlist(strsplit(x, "[ ,]")))によって,以下の結果を得るでしょう。
ANA DEL JAL 2 3 1 3strsplit の split を "[ ,]" にしているのは,「要素とカンマのみ」とはいうものの,"ANA, JAL" のようにスペースも入っていることに対応しているのではあるけれど。まえもって gsub で,空白を削除しておく方がよさそう。 -- 河童の屁は,河童にあらず,屁である。 2015-02-20 (金) 10:44:59
Thomas (2015-02-20 (金) 00:28:36)
はじめまして。Windows7SP1上でR 3.1.2 64bitを使っています。SPSS21から以下のようにデータを読み込み特定値(-99)をNAに置き換えたいのですが,「 (list) オブジェクトは 'double' に変換できません」というエラーが出てしまい置き換えができません。どうしたらよいのでしょうか?
データ例(test.sav)V1 V2 1 -99 2 22 3 23 4 24(なおここで-99はSPSS上ではユーザ欠損値にはなっておりません)
install.packages("memisc") library(memisc) data <- as.data.set(spss.system.file("test.sav")) dat[dat == -99] <- NA 以下にエラー `[<-.data.frame`(`*tmp*`, i, j, value = NA) : (list) オブジェクトは 'double' に変換できません。dat$v2[dat$v2 == -99] <- NA と変数を明示的に指定するとエラーなく通るのですが,実際には沢山の変数があるので,できればいっきにまとめて置き換えたいのです。またいったんSPSSからcsvファイルに落としてread.csvで読むと dat[dat ==- 99] <- NA でも問題なく通るのですが,なぜかSPSSから直接読むとエラーになってしまい,なぜそのようなことが発生するのか理解できなくなっております。
どうかよろしくお願い申し上げます。
risperidone (2015-02-18 (水) 17:53:36)
表題通りですが、エクセルデータ(csv)の数値をエクセル上でコピーして、x=c(3619, 7797, 5039, 1617, 8876, 2156, 1659, 504, 387, 2282, 2891, 1636, 518, 1066, 1061)といった風に、数値の間にカンマを自動で入れるためのテクニックがあればご教授下さい。
今までは手動でカンマの挿入をやっていました。
> dput(scan("")) 1: 1 2 3 4 << ペースト 5: << リターンキーを押す Read 4 items c(1, 2, 3, 4) << これをコピーして利用する > x <- c(1, 2, 3, 4) << たとえば,こんなふうに別解
p <- function() { con <- pipe("pbpaste", "r") txt <- scan(con) close(con) con <- pipe("pbcopy", "w") cat("c(", paste(txt, collapse=", "), ")", file=con, sep="") close(con) }1. Excel でコピーする。
p <- function() cat("c(", paste(scan("clipboard"), collapse=", "), ")", file="clipboard", sep="")かな?使い方は同じ。
shino (2015-02-12 (木) 19:31:14)
はじめまして。
私は今、以下のデータ(DAU,DPU,行動データ)をそれぞれ一括で読み込もうと試行錯誤しています。
sample-data/section8/daily/dau/game-01/2013-05-01~2013-10-31
sample-data/section8/daily/dpu/game-01/2013-05-01~2013-10-31
sample-data/section8/daily/action/game-01/2013-10-31
下記のコードをRで実行した際
「関数 "ldply" を見つけることができませんでした 。」とエラーが出てき、ここからどうすればよいのかわかりません。
ご教授のほどよろしくお願い申し上げます。> library(“plyr”) > library(“foreach”) > readTsvDates <- function(base.dir, app.name, date.from, date.to) { + date.from <- as.Date(date.from) + date.to <- as.Date(date.to) + dates <- seq.Date(date.from, date.to, by = "day") + x <- ldply(foreach(day = dates, combine = rbind) %do% { + read.csv(sprintf("%s/%s/%s/data.tsv", base.dir, app.name, day), + header = T, + sep = "\t", stringsAsFactors = F) + }) + x + } > > # DAUを読みこむ関数 > readDau <- function(app.name, date.from, date.to = date.from) { + data <- readTsvDates("sample-data/section8/daily/dau", app.name, + date.from, date.to) + data + } > # DPUを読みこむ関数 > readDpu <- function(app.name, date.from, date.to = date.from) { + data <- readTsvDates("sample-data/section8/daily/dpu", app.name, + date.from, date.to) + data + } > # 行動データを読みこむ関数 > readActionDaily <- function(app.name, date.from, date.to = date.from) { + data <- readTsvDates("sample-data/section8/daily/action", app.name, + date.from, date.to) + data + } > > # データの読みこみ > > # DAU > dau <- readDau("game-01", "2013-05-01", "2013-10-31") 以下にエラー readTsvDates("sample-data/section8/daily/dau", app.name, date.from, : 関数 "ldply" を見つけることができませんでした > head(dau) log_date app_name user_id 1 2013-08-01 game-01 33754 2 2013-08-01 game-01 28598 3 2013-08-01 game-01 30306 4 2013-08-01 game-01 117 5 2013-08-01 game-01 6605 6 2013-08-01 game-01 346 > # DPU > dpu <- readDpu("game-01", "2013-05-01", "2013-10-31") 以下にエラー readTsvDates("sample-data/section8/daily/dpu", app.name, date.from, : 関数 "ldply" を見つけることができませんでした > head(dpu) log_date app_name user_id payment 1 2013-06-01 game-01 351 1333 2 2013-06-01 game-01 12796 81 3 2013-06-01 game-01 364 571 4 2013-06-01 game-01 13212 648 5 2013-06-01 game-01 13212 1142 6 2013-06-01 game-01 13212 571 > # Action > user.action <- readActionDaily("game-01", "2013-10-31", "2013-10-31") 以下にエラー readTsvDates("sample-data/section8/daily/action", app.name, date.from, : 関数 "ldply" を見つけることができませんでした > head(user.action) 以下にエラー head(user.action) : オブジェクト 'user.action' がありません
> library(plyr) > library(foreach) foreach: simple, scalable parallel programming from Revolution Analytics Use Revolution R for scalability, fault tolerance and more. http://www.revolutionanalytics.com > > readDau <- function(app.name, date.from, date.to) { + date.from <- as.Date(date.from) + date.to <- as.Date(date.to) + dates <- seq.Date(date.from, date.to, by = "day") + ldply(foreach(day = dates, combine = rbind) %do% { + base.dir <- "sample-data/section8/daily/dau" + f <- sprintf("%s/%s/%s/data.tsv", + base.dir, app.name, day) + read.csv(f, header = T, stringsAsFactors = F) + }) + } > > dau <- readDau(“game-01", "2013-05-01", "2013-10-31") > head(dau) log_date app_name user_id 1 2013-08-01 game-01 33754 2 2013-08-01 game-01 28598 3 2013-08-01 game-01 30306 4 2013-08-01 game-01 117 5 2013-08-01 game-01 6605 6 2013-08-01 game-01 346自動編集機能があるわけじゃないのだからね!
risperidone (2015-02-10 (火) 00:34:05)
初めてこちらに質問させて頂きます。宜しくお願いします。
R(3.1.2)をMac OS X 10.10.2で使っています。
重回帰分析までは出来たように思えます。
説明変数はregimen=投薬数、maleは性別、治療アウトカムは治癒したか否かです。
データは全て疾患A・B・Cのいずれかに該当します。> result1 = lm(regimen ~ male + 疾患A-1 + 疾患B + 疾患C + 初発年齢 + 投与開始年齢 + 最終受診時年齢 + 治療アウトカム, data=dat) > summary(result1) Call: lm(regimen ~ male + 疾患A-1 + 疾患B + 疾患C + 初発年齢 + 投与開始年齢 + 最終受診時年齢 + 治療アウトカム, data=dat) Residuals: Min 1Q Median 3Q Max -4.0473 -1.3977 -0.3918 0.8142 11.5159 Coefficients: Estimate Std. Error t value Pr(>|t|) male 0.19436 0.22706 0.856 0.392499 疾患A 0.95790 0.48769 1.964 0.050192 . 疾患B 2.58759 0.43024 6.014 4.03e-09 *** 疾患C 1.93298 0.37667 5.132 4.45e-07 *** 初発年齢 0.04138 0.02220 1.864 0.063002 . 治療開始年齢 -0.08136 0.02203 -3.692 0.000252 *** 最終受診年齢 0.03569 0.01069 3.340 0.000916 *** 治療アウトカム 1.49465 0.22467 6.653 9.31e-11 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2.239 on 407 degrees of freedom Multiple R-squared: 0.7106, Adjusted R-squared: 0.7049 F-statistic: 124.9 on 8 and 407 DF, p-value: < 2.2e-16ここでVIFパッケージをインストールしました。
URL 'http://cran.ism.ac.jp/bin/macosx/mavericks/contrib/3.1/VIF_1.0.tgz' を試しています Content type 'application/x-gzip' length 2356946 bytes (2.2 Mb) 開かれた URL ================================================== downloaded 2.2 Mb ダウンロードされたパッケージは、以下にあります /var/folders/4k/37q819dx1dn03k0zl3n0yhth0000gp/T//Rtmp9lSQKf/downloaded_packages > library(VIF) > vif(result1) 以下にエラー as.vector(y) - mean(y) : 二項演算子の引数が数値ではありません 追加情報: 警告メッセージ: In mean.default(y) : argument is not numeric or logical: returning NAエラーメッセージ後の対応が分からず苦慮しております。ご教授頂けたら幸いです。宜しくお願いします。
ファイル添付からデータをアップロードさせて頂きました。
URL 'http://cran.ism.ac.jp/bin/macosx/mavericks/contrib/3.1/DAAG_1.20.tgz' を試しています Content type 'application/x-gzip' length 1983807 bytes (1.9 Mb) 開かれた URL ================================================== downloaded 1.9 Mb ダウンロードされたパッケージは、以下にあります /var/folders/4k/37q819dx1dn03k0zl3n0yhth0000gp/T//RtmpBg33vj/downloaded_packages > library(DAAG) 要求されたパッケージ lattice をロード中です Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : ‘latticeExtra’ という名前のパッケージはありません エラー: ‘DAAG’ に対するパッケージもしくは名前空間のロードが失敗しました
> result3 <- lm(regimen ~ sex + seizure_type + first + AEDage + lastAge + outcome, data=dat3) > summary(result3) Call: lm(formula = regimen ~ sex + seizure_type + first + AEDage + lastAge + outcome, data = dat3) Residuals: Min 1Q Median 3Q Max -3.8267 -1.5011 -0.3003 0.8695 11.3550 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.738749 0.572593 3.037 0.002546 sex 0.191705 0.230669 0.831 0.406413 seizure_type 0.003416 0.181867 0.019 0.985023 first 0.033675 0.022452 1.500 0.134426 AEDage -0.075155 0.022321 -3.367 0.000832 lastAge 0.043301 0.010658 4.063 5.82e-05 outcome 1.609017 0.226135 7.115 5.05e-12 Residual standard error: 2.275 on 408 degrees of freedom Multiple R-squared: 0.1676, Adjusted R-squared: 0.1553 F-statistic: 13.69 on 6 and 408 DF, p-value: 3.515e-14 > install.packages("car") 省略 > library(car) > Anova(result3) Anova Table (Type II tests) Response: regimen Sum Sq Df F value Pr(>F) sex 3.58 1 0.6907 0.4064126 seizure_type 0.00 1 0.0004 0.9850233 first 11.64 1 2.2496 0.1344258 AEDage 58.68 1 11.3364 0.0008321 lastAge 85.44 1 16.5058 5.818e-05 outcome 262.05 1 50.6274 5.053e-12 Residuals 2111.86 408となりました。seizure_typeのPrが0.9850233となりました。しかし、SPSSでやった一変量の分散分析とは異なる結果(SPSSではseizure_typeのP<0.001)になってしまいました。Rでの処理の仕方が悪かったでしょうか。使用したcsvは同一のものです。 -- risperidone 2015-02-10 (火) 17:03:55
> dat3$seizure_type <- factor(dat3$seizure_type) > oneway.test(regimen~seizure_type, dat3, var.equal=TRUE) One-way analysis of means data: regimen and seizure_type F = 10.6063, num df = 2, denom df = 412, p-value = 3.224e-05lm の結果は違うものになる(seizure_type1 がベースラインになる)
> result3 <- lm(regimen ~ sex + seizure_type + first + AEDage + lastAge + outcome, data=dat3) > summary(result3) Call: lm(formula = regimen ~ sex + seizure_type + first + AEDage + lastAge + outcome, data = dat3) Residuals: Min 1Q Median 3Q Max -4.0473 -1.3977 -0.3918 0.8142 11.5159 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.95790 0.48769 1.964 0.050192 sex 0.19436 0.22706 0.856 0.392499 seizure_type2 1.62969 0.46882 3.476 0.000563 seizure_type3 0.97509 0.44129 2.210 0.027688 first 0.04138 0.02220 1.864 0.063002 AEDage -0.08136 0.02203 -3.692 0.000252 lastAge 0.03569 0.01069 3.340 0.000916 outcome 1.49465 0.22467 6.653 9.31e-11 Residual standard error: 2.239 on 407 degrees of freedom Multiple R-squared: 0.1954, Adjusted R-squared: 0.1816 F-statistic: 14.12 on 7 and 407 DF, p-value: < 2.2e-16Anova も結果が変わる
> library(car) > Anova(result3) Anova Table (Type II tests) Response: regimen Sum Sq Df F value Pr(>F) sex 3.67 1 0.7327 0.3924989 seizure_type 70.65 2 7.0439 0.0009832 first 17.43 1 3.4755 0.0630017 AEDage 68.37 1 13.6334 0.0002525 lastAge 55.94 1 11.1536 0.0009160 outcome 221.96 1 44.2578 9.308e-11 Residuals 2041.21 407重回帰分析にカテゴリー変数を使うときには注意が必要(初歩的ではあるが) -- 河童の屁は,河童にあらず,屁である。 2015-02-11 (水) 09:29:02
Bee (2015-02-09 (月) 20:24:44)
初めまして。beeswarmを使用して散布図を作成しています。PC上ではカラーで綺麗なのですが、論文投稿のため2群間のプロットを○と●で表示したいのですが、どの様にしてよいのか分かりません。data1 <- read.delim("clipboard") beeswarm(temp~ day, data = data1, pch = 16, pwcol = 1 + as.numeric(kubun), xlab = "", ylab = "Follow-up time (months)", labels = c("day1", "day3", "day5", "day8", "day10", "day12", "day15","day18", "day21")) legend("topright", legend = c("F", "G"), title = "Censored", pch = 16, col = 1:2)の、pwcol = 1 + as.numeric(kubun) が、解決するポイントとは思いますが、どの様にすれば良いのか解らず困っております。
何とぞ、お教えの程お願いいたします。
R ×64 3.1.2 を使用しています。
kubun day temp 2 1 35.9 1 1 36.5 1 1 36.5 2 1 36.8 1 1 36.9 2 1 36.9 2 1 37.2 1 1 37.3 2 1 37.3 1 1 38.8 1 3 36.3 1 3 36.3 2 3 36.3 1 3 36.5 1 3 36.7 2 3 36.7 2 3 36.8 1 3 36.9 2 3 37.8
library(beeswarm) beeswarm(temp ~ day, data = data1, pwpch = c(1, 16)[as.numeric(kubun)], pwcol = as.numeric(kubun), xlab = "", ylab = "Follow-up time (months)", labels = paste("day", c(1, 3, 5, 8, 10, 12, 15, 18, 21), sep="")) legend("top", legend = c("F", "G"), title = "Censored", pch = c(1,16)[as.numeric(data1$kubun)], col = (1:2) [as.numeric(data1$kubun)])
島田泰夫 (2015-02-07 (土) 08:29:45)
ふたたび質問させて下さい。
やはり解決しないので・・・wd <- sample(1:16,100, replace=TRUE) ws <- sample(0:10,100, replace=TRUE) inds <- sample(0:100,100, replace=TRUE) d <- data.frame(wd=wd, ws=ws, inds=inds)ここから、wdとwsのクロス集計表を作成し、そこからこのクロス集計に対応したindsの合計値(表)を得たいのです。
tapply(d$inds, d$wd, d$ws, sum)は、文法上できないですし
そこで・・re <- ftable(d$inds, d$wd, d$ws)から得られたオブジェクトを操作しようとして
gyo <- sort(unique(d$inds)) gyo2 <- length(gyo) gyo3 <- 0 re.mat <- matrix(nr=16, nc=11,0) for ( i in 1: gyo2){ for ( j in 1:16 ){ gyo3 <- gyo3 +1 for ( k in 1:11){ re.mat[j, k] <- re.mat[j, k] + re[gyo3,k]*gyo[i] }}}としてようやく目的の値(表)を得ることができましたが、汚いです。
もう少し効率的、綺麗な方法はありませんでしょうか?
a <- tapply(d$inds, list(d$wd, d$ws), sum) a[is.na(a)] <- 0 aしかし,もっと良い方法がある。
xtabs(inds ~ wd + ws, d)関数 1 つで,答えが求まる。-- 河童の屁は,河童にあらず,屁である。 2015-02-07 (土) 09:22:55
島田 泰夫 (2015-02-05 (木) 10:58:21)
初歩的な質問で恐縮です。
library(gplots)のballoonplotについて、教えて下さい。wd1 <- sample(c(1:16),100, replace=TRUE) wd2 <- sample(c(1:16),100, replace=TRUE) inds <- sample(c(0:25),100,replace=TRUE)ここから
balloonplot(wd1,wd2,inds)とすると、列名は1〜16にきちんと並びますが、行名がバラバラになります。
行名を1〜16に並べる方法はありますでしょうか・・・?
> d <- cbind(expand.grid(wd1 = 1:16, wd2 = 1:16), inds = sample(c(0:25, NA), 256, replace=TRUE)) > with(d, balloonplot(wd1, wd2, inds))
Fk (2015-02-04 (水) 09:44:05)
お世話になります。 win 7, R 3.0.2を使用しています。
a <- c("1_2_3_4_5", "2_3_4_1_5") dat <- data.frame(C1=c(3,2,4,1,5), C2=c(4,5,3,2,1))
ここで、aの数字をdatのC1列からC2列への行方向に置換して、a[1]は"2_5_4_3_1"、a[2]は"5_4_3_2_1"になるようにしたいです。実際にはaはもっとたくさんの要素をもち、datも数十行はあります。
strsplitでaを分割してgsubするという処理をfor文で繰り返そうかと思ったのですが、繰り返しの過程で置換したものを再置換してしまいそうでわからなくなりました。
宜しくお願いします。
unlist(lapply(lapply(lapply(strsplit(a,"_"),as.numeric),function(x)unlist(lapply(lapply(x,`==`,dat[,"C1"]),function(x){dat[x,"C2"]}))),paste,sep="",collapse="_"))こんな感じです -- なかま 2015-02-04 (水) 12:42:08
a <- c("1_2_3_4_5", "2_3_4_1_5") dat <- data.frame(C1=c(3,2,4,1,5), C2=c(4,5,3,2,1)) c1 <- as.character(dat$C1) # 拡張可能性を残すように文字型で扱う(data.frame にする必要はない) c2 <- as.character(dat$C2) # 同じく for (i in seq_along(a)) { # a の各要素について s <- unlist(strsplit(a[i], "_")) # "_" を区切り文字として文字ベクトル s を作る for (j in seq_along(c1)) { # s の各文字 s[j] について s[j] <- c2[which(s[j] == c1)] # s[j] と等しい c1 の要素と同じ位置にある c2 の要素を s[j] に代入 } a[i] <- paste(s, collapse="_") # 文字ベクトル s の要素を "_" で繋いで 1 つの文字列にする } a内側の for は sapply で置き換えると
for (i in seq_along(a)) { s <- unlist(strsplit(a[i], "_")) s <- sapply(s, function(ch) c2[which(ch == c1)]) a[i] <- paste(s, collapse="_") }のようになり,さらに,s を次々に関数に渡してやると,
for (i in seq_along(a)) { a[i] <- paste(sapply(unlist(strsplit(a[i], "_")), function(ch) c2[which(ch == c1)]), collapse="_") }のように 1 行になる。外の for も sapply にできるけど,そこまでやるとやり過ぎ感が...C1, C2 も元のままを使うと以下のような一行野郎ができあがる(なかまさんのより若干短い)
unname(sapply(a,function(b)paste(sapply(unlist(strsplit(b,"_")),function(ch)as.character(dat$C2)[which(ch==as.character(dat$C1))]),collapse="_")))a の中の数が 1 桁だけならば,which の代わりに chartr を使うようにすればもう少し簡単になるが... -- 河童の屁は,河童にあらず,屁である。 2015-02-04 (水) 14:51:18
けい (2015-02-03 (火) 16:31:35)
はじめまして。
時系列を使った相関図を書きたいのですが、上下反転がうまく行きません。
X軸に個数、Y軸に時間という設定で、時間は上から下に進んでいくという流れで設定したいのですけど、attach(df) x <- strptime(TIME, "%H:%M:%S", tz = "") plot(Count, x, pch = 16, col = "#FF5050", cex =1, xlab = "", ylab = "", yaxt = "n") r <- as.POSIXct(round(range(x), "mins")) axis.POSIXct(2, at = seq(r[1], r[2], by = "mins"), format = "%H:%M") detach(df1)では、当然r[1]が下に来てしまうので、逆になってしまいます。
seq内のr[1]とr[2]をしたり、byをマイナスにしたり・・(当然エラーになりますが)なかなかうまく行きません。
プロット自体はplotにylim=c(r[2], r[1])を入れれば反転しますが、軸が表示されなくなってしまいました。
いい方法があれば、どうかよろしくお願いいたします。
set.seed(12345) n <- 20 x <- Sys.time()+1:n*60 Count <- sample(100, n) plot(Count, x, pch = 16, col = "#FF5050", cex =1, xlab = "", ylab = "", yaxt = "", ylim=c(x[n], x[1])) axis(2, at = as.numeric(x), labels=substring(as.character(x), 12, 16))
高田 (2015-02-02 (月) 19:43:14)
はじめまして。
数学記号の「≤」をtextとして図に描きこめないものかと苦労しております。
今のところ試してみたのは、expression関数や、mtextでfontを指定してみる方法ですが、うまくいきません。
どなたかいい方法をご存じの方おられないでしょうか。
どうかよろしくお願い申し上げます。
plot(0, 0, xlim=c(0,1), ylim=c(0,1), type="n", xlab="u ≦ v", ylab=expression(aa <= bb)) text(0.2, 0.2, expression(x <= y)) text(0.2, 0.5, "x ≦ y") mtext("x ≦ y", 3, 0.5) mtext(expression(x <= y), 1, 3) legend("topright", legend=c(expression(x1 <= y2), "w≦q"))
mtext(expression(90<=), 1, 3)などとすると、Unicodeで「90<U+2264>」と表示されてしまいます。
mtext(expression(paste("90<=", "", sep="")), 1, 3)としても同様の結果です。
マンジャ (2015-01-28 (水) 21:30:08)
はじめまして、RでパッケージRMySQLを使いテーブルのデータをRのデータフレームとして取り込みました。
※コネクション確立後にSQLを発行してデータフレームに取り込んだ所、data.table <- dbGetQuery(dbconnector, "select * from 〜 ")※データ(MySQLテーブル:販売履歴)
商品名 販売日時 販売単価 販売個数
りんご ○○○○ ☓☓☓☓ △△△△
みかん ○○○○ ☓☓☓☓ △△△△
なし ○○○○ ☓☓☓☓ △△△△
※データフレーム
商品名 販売日時 販売単価 販売個数
1 りんご ○○○○ ☓☓☓☓ △△△△
2 みかん ○○○○ ☓☓☓☓ △△△△
3 なし ○○○○ ☓☓☓☓ △△△△
データフレーム上では1,2,3が自動採番されてしまいます。
この時商品名をラベルとして変更するにはどのようにすれば良いのでしょうか?
レコード数は数万件あり一括でラベルとして変更したく思います。
宜しくご示唆お願いします。
SAN (2015-01-25 (日) 13:50:03)
はじめまして,Loessにおける平滑化幅についてなのですが,Loessにおける平滑化パラメータはspanの引数で決められているみたいなのですが,疑問点があります.
例えば,100個のデータがあった場合,平滑幅を10にしてLoessをかけるといった場合spanパラメータをどのように設定するべきなのでしょうか?
どなたかご教授お願いします.
初心者 (2015-01-23 (金) 00:04:22)
欧米語のテキストマイニングを行うパッケージのひとつにtmパッケージというのがありますが、これを使って、複数の文書ファイルのターム・文書行列を作成しますと、常に行数が36行になってしまいます。
また、潜在的意味インデキシング用のパッケージ(lsa)を利用し、特異値分解しましても、同じように36行のターム・文書行列が得られます。
英文のパッケージガイドを見ましてもなにも記載されていないのですが、何か制約があるのでしょうか?また、36行に限らず、すべてのデータを分析対象にする場合、どのようにすれば良いでしょうか?
ご教示いただけますと助かります。
KK (2015-01-22 (木) 08:16:18)
お世話になります。
エクセルを読み込もうとしてxlsxをインストールしたのですが、読み込もうとすると以下のようなエラーが出ます。> library(xlsx) 要求されたパッケージ rJava をロード中です Error : .onLoad は loadNamespace()('rJava' に対する)の中で失敗しました、詳細は: call: fun(libname, pkgname) error: JAVA_HOME cannot be determined from the Registry エラー: パッケージ ‘rJava’ をロードできませんでした別途rJavaをインストールしても同じエラーが出ました。
環境はWIn 7 64-bit, R 3.1.2 64-bit, xlsx_0.5.7です。
どなたか宜しくお願いします。
佐藤 (2015-01-21 (水) 08:55:58)
はじめまして。
Windows 7でR version 3.1.0 を使用しています。
添付のようなデータでid=cを(サンプル数が少ないため)除去したうえで単回帰をして、idごとに回帰係数を取り出したいのですが、エラーメッセージがでてしまいます。除去したはずのid=cがobservation数が0で残っているのが原因ではないかと考えています
エラーを出さずに、idごとに解析を行うためにはどのようにすればいいのでしょうか?例ではグループは2つなので個別にしてもいいのですが、実際に使いたいデータではグループ数が非常に多いので個別に分けずに解析したいと考えています。
用いたデータid y x a 1 1 a 3 2 a 3 3 a 3 4 a 3 5 a 3 6 a 3 7 a 3 8 a 3 9 a 3 10 b 1 1 b 1 2 b 2 3 b 3 4 b 4 5 b 5 6 b 4 7 b 5 8 b 6 9 b 4 10 b 1 11 b 2 12 b 3 13 b 4 14 b 5 15 b 6 16 c 3 1 c 3 2 c 3 3 c 3 4プログラム
d <- read.csv("dummy.csv", colClasses=c("factor", "numeric", "numeric"), col.names=c("id", "y", "x")) #データ読み込み d2 <- do.call("rbind", by (d, d$id, function(x) subset(x, length(id)>=10))) # サンプル数が10以上のidのみ抽出 d3 <- lapply(split(d2, d2$id), function(x) { coef(lm(y~x, data=x))}) # わなごとに線形回帰 d4 <- do.call(rbind, d3) # リストをたてに並べる d5 <- unique(d2$id) # 5日分揃っているわなid名を並べる d6 <- cbind(d4, d5) # わなごとに線形回帰の傾きを並べるエラーメッセージ
> d3<- lapply(split(d2, d2$id), function(x) { + coef(lm(y~x, data=x))}) # わなごとに線形回帰 以下にエラー lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases > dd <- split(d2,d2$id) > dd $a id y x a.1 a 1 1 a.2 a 3 2 a.3 a 3 3 a.4 a 3 4 a.5 a 3 5 a.6 a 3 6 a.7 a 3 7 a.8 a 3 8 a.9 a 3 9 a.10 a 3 10 $b id y x b.11 b 1 1 b.12 b 1 2 b.13 b 2 3 b.14 b 3 4 b.15 b 4 5 b.16 b 5 6 b.17 b 4 7 b.18 b 5 8 b.19 b 6 9 b.20 b 4 10 b.21 b 1 11 b.22 b 2 12 b.23 b 3 13 b.24 b 4 14 b.25 b 5 15 b.26 b 6 16 $c [1] id y x <0 行> (または長さ 0 の row.names
田中 (2015-01-11 (日) 11:29:25)
初めまして。エラーがでてしまいました。A B C D E F G H I ? 3 3 2 2 1 3 3 3 3 ? 3 2 2 2 1 2 2 2 3 ? 3 3 2 2 1 2 2 2 3 ? 3 3 2 2 1 3 3 3 2 ? 3 1 2 2 1 3 1 2 2 ? 3 1 2 3 2 3 2 2 3?以降同様のデータに
> A <- factor(gakuryoku$A, level=c(1:3), labels="A") > B <- factor(gakuryoku$B, level=c(1:3), labels="B") > C <- factor(gakuryoku$C, level=c(1:3), labels="C") > D <- factor(gakuryoku$D, level=c(1:3), labels="D") > E <- factor(gakuryoku$E, level=c(1:3), labels="E") > F <- factor(gakuryoku$F, level=c(1:3), labels="F") > G <- factor(gakuryoku$G, level=c(1:3), labels="G") > H <- factor(gakuryoku$H, level=c(1:3), labels="H") > I <- factor(gakuryoku$I, level=c(1:3), labels="I") gakuryoku <- data.frame(A, B, C, D, E, F, G, H, I) > summary(gakuryoku) A B C D E F G H I A1: 0 B1:15 C1: 1 D1: 0 E1:9 F1: 1 G1: 2 H1: 1 I1:4 A2: 6 B2: 2 C2:19 D2:13 E2:9 F2:12 G2: 5 H2:12 I2:9 A3:14 B3: 3 C3: 0 D3: 7 E3:2 F3: 7 G3:13 H3: 7 I3:7 > library(MASS) > result <- mca(gakuryoku) 以下にエラー svd(X) : infinite or missing values in 'x'このようになってしまい01データに手書きでなおしたところ
> library(MASS) > result <- corresp(gakuryoku, nf=2) 以下にエラー if (any(x < 0 | x%%1 > 10 * sqrt(.Machine$double.eps))) warning("negative or non-integer entries in table") : TRUE/FALSE が必要なところが欠損値ですこのようになってしまいました。
ご存知のかたがいらっしゃいましたら教えていただければ幸いです。よろしくお願い致します。
> d <- data.frame( + V1=c("G1", "G1", "G4", "G2", "G1", "G2", "G4", "G2", "G1", "G2", + "G3", "G1", "G4", "G3", "G2", "G2", "G4", "G3", "G1", "G1"), + V2=c("G4", "G1", "G4", "G3", "G4", "G1", "G2", "G4", "G4", "G2", + "G2", "G3", "G1", "G4", "G3", "G2", "G3", "G4", "G4", "G4"), + V3=c("G3", "G4", "G2", "G2", "G1", "G4", "G4", "G1", "G2", "G2", + "G2", "G2", "G4", "G2", "G2", "G1", "G2", "G2", "G2", "G1"), + V4=c("G1", "G4", "G4", "G2", "G1", "G1", "G1", "G1", "G4", "G4", + "G3", "G1", "G2", "G3", "G1", "G1", "G3", "G2", "G2", "G4")) > head(d) V1 V2 V3 V4 1 G1 G4 G3 G1 2 G1 G1 G4 G4 3 G4 G4 G2 G4 4 G2 G3 G2 G2 5 G1 G4 G1 G1 6 G2 G1 G4 G1 : 以下略mca による結果
> library(MASS) > mca.ans <- mca(d, nf=4) > mca.ans$rs 1 2 3 4 1 -0.026164906 0.0727723629 0.02915530 0.017382771 2 -0.064324198 -0.0332701769 0.05114780 -0.015152209 3 0.008399898 -0.0046851523 0.03377283 -0.007587154 4 0.021779690 -0.0192237849 -0.02840124 0.070306712 5 -0.024902139 0.0594956357 -0.00176808 -0.010356828 6 -0.067724238 -0.0463843306 -0.01937229 -0.002168915 7 -0.033804964 -0.0478207290 -0.02440187 -0.036684297 8 -0.023898191 0.0437365528 -0.04181725 -0.010419718 9 0.003553358 0.0327554722 0.04300472 -0.001282724 10 0.004376380 -0.0044299836 -0.03101589 -0.028594653 11 0.081159763 -0.0262334048 -0.01360086 -0.058987930 12 0.005643769 0.0152553961 -0.01674848 0.050368614 13 -0.048749672 -0.0867859703 0.03984140 0.011590533 14 0.081340688 -0.0048070319 0.02037058 -0.031738891 15 0.006647717 -0.0005036868 -0.05679765 0.050305724 16 -0.024079116 0.0223101799 -0.07578869 -0.037668756 17 0.053220714 -0.0412113236 -0.01142654 0.026460106 18 0.053742257 -0.0045010348 0.03421316 0.005866176 19 0.014281342 0.0166803033 0.04093021 0.031764449 20 -0.020498151 0.0568507065 0.02870284 -0.023403011 > mca.ans$cs 1 2 3 4 V1.G1 -0.028758519 0.061572202 0.059474742 0.020657976 V1.G2 -0.024742727 -0.001464130 -0.100721937 0.020406415 V1.G3 0.129085140 -0.023153151 0.032606545 -0.082935116 V1.G4 -0.009372356 -0.088190296 0.022547198 -0.004559743 V2.G1 -0.107926641 -0.108426052 0.056979406 -0.005600561 V2.G2 0.012380084 -0.027445479 -0.086408024 -0.118695929 V2.G3 0.039081385 -0.022320009 -0.067651392 0.144720841 V2.G4 0.013103783 0.058260012 0.049477716 -0.009699774 V3.G1 -0.041806012 0.089113664 -0.054104436 -0.059993352 V3.G2 0.054400021 -0.007267273 0.003103075 0.028487799 V3.G3 -0.046857079 0.142220572 0.069589089 0.050965044 V3.G4 -0.096079775 -0.104683805 0.028173707 -0.031089356 V4.G1 -0.042147810 0.029036665 -0.061920342 0.007607840 V4.G2 0.018380083 -0.045843728 0.051665291 0.087611794 V4.G3 0.128773807 -0.047067716 -0.003705030 -0.062808472 V4.G4 -0.024531855 0.018456948 0.059963333 -0.044576896MASS パッケージの corresp は,データフレームまたは行列を引数とする。それぞれの列(変数)は factor であってはならない。
> head(m) V1.G1 V1.G2 V1.G3 V1.G4 V2.G1 V2.G2 V2.G3 V2.G4 V3.G1 V3.G2 V3.G3 V3.G4 V4.G1 V4.G2 V4.G3 V4.G4 [1,] 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 [2,] 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 [3,] 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 [4,] 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 [5,] 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 [6,] 0 1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 : 以下略corresp による結果
> corresp.ans <- corresp(m, nf=4) > corresp.ans$rscore [,1] [,2] [,3] [,4] [1,] -0.62635736 -1.81986611 0.80575746 -0.53244003 [2,] -1.53984634 0.83200909 1.41355833 0.46411717 [3,] 0.20108378 0.11716467 0.93337091 0.23239702 [4,] 0.52138041 0.48074177 -0.78491769 -2.15351783 [5,] -0.59612820 -1.48784631 -0.04886397 0.31723305 [6,] -1.62123935 1.15996332 -0.53538697 0.06643460 [7,] -0.80925145 1.19588427 -0.67438798 1.12365214 [8,] -0.57209485 -1.09374861 -1.15569243 0.31915939 [9,] 0.08506324 -0.81913754 1.18851013 0.03929025 [10,] 0.10476545 0.11078350 -0.85717801 0.87586366 [11,] 1.94287015 0.65603593 -0.37588337 1.80681978 [12,] 0.13510526 -0.38150168 -0.46287335 -1.54280729 [13,] -1.16701035 2.17031357 1.10108639 -0.35502187 [14,] 1.94720128 0.12021259 0.56297632 0.97217272 [15,] 0.15913860 0.01259603 -1.56970181 -1.54088094 [16,] -0.57642599 -0.55792527 -2.09455211 1.15380645 [17,] 1.27404188 1.03059855 -0.31579223 -0.81048179 [18,] 1.28652700 0.11256032 0.94554009 -0.17968290 [19,] 0.34187869 -0.41713526 1.13117743 -0.97295556 [20,] -0.49070184 -1.42170283 0.79325287 0.71684197 > corresp.ans$cscore [,1] [,2] [,3] [,4] V1.G1 -0.5144480 -1.10143703 1.06391653 -0.36954110 V1.G2 -0.4426114 0.02619115 -1.80176879 -0.36504106 V1.G3 2.3091452 0.41417615 0.58328362 1.48358847 V1.G4 -0.1676578 1.57759598 0.40333654 0.08156717 V2.G1 -1.9306505 1.93958419 1.01927861 0.10018589 V2.G2 0.2214617 0.49095966 -1.54571372 2.12329733 V2.G3 0.6991091 0.39927246 -1.21018490 -2.58884511 V2.G4 0.2344076 -1.04218678 0.88508429 0.17351483 V3.G1 -0.7478487 -1.59411368 -0.96784958 1.07319370 V3.G2 0.9731372 0.13000094 0.05550950 -0.50960523 V3.G3 -0.8382049 -2.54411894 1.24484748 -0.91169042 V3.G4 -1.7187273 1.87264084 0.50398660 0.55614330 V4.G1 -0.7539629 -0.51942365 -1.10766476 -0.13609317 V4.G2 0.3287929 0.82007753 0.92421682 -1.56724742 V4.G3 2.3035759 0.84197290 -0.06627759 1.12355210 V4.G4 -0.4388392 -0.33016792 1.07265671 0.79741575mca.ans$rs と mca.ans$cs および corresp.ans$rscore と corresp.ans$cscore の値は全く異なるように見えるが,両者の比を取ってみれば,同じであることがわかる。
> options(digits=15) > mca.ans$rs / corresp.ans$rscore 1 2 3 4 1 0.0417731277160878 -0.0399877564039938 0.0361837189716289 -0.0326473788200238 2 0.0417731277160868 -0.0399877564039941 0.0361837189716296 -0.0326473788200223 3 0.0417731277160874 -0.0399877564039920 0.0361837189716295 -0.0326473788200222 4 0.0417731277160871 -0.0399877564039938 0.0361837189716303 -0.0326473788200232 5 0.0417731277160877 -0.0399877564039937 0.0361837189716316 -0.0326473788200234 6 0.0417731277160869 -0.0399877564039944 0.0361837189716289 -0.0326473788200271 7 0.0417731277160865 -0.0399877564039941 0.0361837189716286 -0.0326473788200237 8 0.0417731277160877 -0.0399877564039935 0.0361837189716295 -0.0326473788200248 9 0.0417731277160847 -0.0399877564039941 0.0361837189716293 -0.0326473788200123 10 0.0417731277160868 -0.0399877564039947 0.0361837189716291 -0.0326473788200238 11 0.0417731277160871 -0.0399877564039930 0.0361837189716277 -0.0326473788200234 12 0.0417731277160859 -0.0399877564039937 0.0361837189716307 -0.0326473788200232 13 0.0417731277160864 -0.0399877564039939 0.0361837189716297 -0.0326473788200247 14 0.0417731277160870 -0.0399877564039879 0.0361837189716300 -0.0326473788200230 15 0.0417731277160864 -0.0399877564040110 0.0361837189716298 -0.0326473788200229 16 0.0417731277160875 -0.0399877564039929 0.0361837189716293 -0.0326473788200240 17 0.0417731277160872 -0.0399877564039935 0.0361837189716299 -0.0326473788200231 18 0.0417731277160870 -0.0399877564039893 0.0361837189716294 -0.0326473788200265 19 0.0417731277160868 -0.0399877564039947 0.0361837189716291 -0.0326473788200239 20 0.0417731277160878 -0.0399877564039938 0.0361837189716294 -0.0326473788200229 > mca.ans$cs / corresp.ans$cscore 1 2 3 4 V1.G1 0.0559016994374954 -0.0559016994374948 0.0559016994374943 -0.0559016994374964 V1.G2 0.0559016994374953 -0.0559016994375155 0.0559016994374948 -0.0559016994374922 V1.G3 0.0559016994374948 -0.0559016994374923 0.0559016994374962 -0.0559016994374943 V1.G4 0.0559016994374905 -0.0559016994374947 0.0559016994374959 -0.0559016994374945 V2.G1 0.0559016994374944 -0.0559016994374951 0.0559016994374953 -0.0559016994374897 V2.G2 0.0559016994374958 -0.0559016994374951 0.0559016994374939 -0.0559016994374952 V2.G3 0.0559016994374949 -0.0559016994374948 0.0559016994374959 -0.0559016994374945 V2.G4 0.0559016994374930 -0.0559016994374950 0.0559016994374945 -0.0559016994374919 V3.G1 0.0559016994374958 -0.0559016994374944 0.0559016994374945 -0.0559016994374952 V3.G2 0.0559016994374948 -0.0559016994374915 0.0559016994374895 -0.0559016994374948 V3.G3 0.0559016994374961 -0.0559016994374948 0.0559016994374939 -0.0559016994374954 V3.G4 0.0559016994374943 -0.0559016994374951 0.0559016994374963 -0.0559016994374945 V4.G1 0.0559016994374952 -0.0559016994374937 0.0559016994374949 -0.0559016994374900 V4.G2 0.0559016994374959 -0.0559016994374942 0.0559016994374941 -0.0559016994374954 V4.G3 0.0559016994374950 -0.0559016994374936 0.0559016994374833 -0.0559016994374949 V4.G4 0.0559016994374950 -0.0559016994374947 0.0559016994374950 -0.0559016994374943
toyan (2015-01-05 (月) 15:16:22)
お世話になります。
環境は、
R version 3.1.1 (2014-07-10)
OS:Windows 7
Platform: i386-w64-mingw32/i386 (32-bit)
です。
パッケージmgcvの関数smooth.construct.cr.smooth.spec()を若干書き換えて使用したいと思っています。ソースファイルsmooth.rのうち、該当部分に修正を加えて、実行しようとしたところ、oo <- .C(C_crspl,x=as.double(x),n=as.integer(nx),xk=as.double(k), nk=as.integer(nk),X=as.double(X),S=as.double(S), F=as.double(F),Fsupplied=as.integer(F.supplied))のところで、引っかかってしまい、
以下にエラー my.cr(x, knots = kn) : オブジェクト 'C_crspl' がありませんというメッセージが出て実行できません。Cのソースファイルmgcv.cを見ると、void crspl()という関数が目的の関数のようなので、上記のC_crsplをcrsplに書き換えてみても同じようなエラーメッセージが出てしまいます。"crspl"と文字列に変えてみても同様です。
パッケージmgcvのlibフォルダにあるmgcv.dllファイルをdyn.loadで読み込もうとしても、> dyn.load("c:/r/library/mgcv/libs/i386/mgcv.dll") > is.loaded("mgcv") [1] FALSEとなって、必要なライブラリが読み込めていないようです。
このように、必要なC関数をRから読み込むにはどうしたらよろしいのでしょうか?
初歩的な質問で恐縮ですが、御教示のほどよろしくお願い申し上げます。
Beginner (2015-01-03 (土) 15:38:57)
two-way anovaの結果で独立変数1の自由度が7, 独立変数2の自由度が1でresidualsの自由度が87の結果が出ました。これに関してF値を記載する場合はどうすればよいのでしょうか。
F値にはanova(aov(x~y))のような独立変数一つの値を用いるべきなのでしょうか。
周りによく知っている人が居らず書籍もなかなか見つからずで困っています。
どうか教えて頂ければ幸いです。
南 (2014-12-31 (水) 04:17:37)
windows7 64bit R 3.1.2
R言語でTwitterを操作する
このサイトに沿って、Oauth認証を試みてます。registerTwitterOAuth(cred) [1] TRUEまではいけたのですが、
userTimeline("mima_ita",cainfo="cacert.pem") [1] "Authorization Required" Error in twInterfaceObj$doAPICall(cmd, params, method, ...) : Error: Authorization Requiredとなってしまいます。ログインが上手く言っていないということはわかるのですが、
registerTwitterOAuth(cred) [1] TRUEとなっているので、なぜログインができていない状態になっているのかがわかりません。どうすればログイン状態にできるでしょうか?
はなちゃん (2014-12-30 (火) 17:08:04)
エクセル上に,日ごとのデータが100年分約36000個あります.
このデータの月毎の平均値を,上から計算していくことはできないでしょうか?
コピーペーストで1ヶ月毎に平均していくと1200回やる必要があり大変です。
Rでできないでしょうか?エクセルでもいいのですが。
EXCEL のデータ!!を test.csv というファイルに CSV として保存したファイルが以下のようならば, date,value 19320101,4 19320102,5 19320103,7 19320104,9 19320105,8 19320106,9 19320201,5 19320201,14 19320202,15 19320203,17 19320304,19 19320405,18 19320406,19 19320401,15 以下の 2 行で片付くでしょう d <- read.csv("test.csv") by(d$value, d$date%/%100, mean)
ランティス (2014-12-17 (水) 19:21:21)
初歩的な質問だったら申し訳ありません。
過去ログを検索したところ、同様の症状が見られなかった為、質問させていただきます。
caretパッケージをインストールした後、libraryコマンドを使用してパッケージを使用できる状態にしようとしたところ以下のエラーが発生しました。
環境:OS windows 7 64bit Rver: 3.1.2コード:
install.packages("caret", dependencies = T) library(caret)エラー:
library(caret) 要求されたパッケージ lattice をロード中です Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : ‘minqa’ という名前のパッケージはありません Error: ‘caret’ に対するパッケージもしくは名前空間のロードが失敗しました行った対応:
? install.packagesを使用して再度
? GUIのInstallPackagesで再インストール
? library()コマンドでライブラリー内にcaretがあるか確認(ありました。)
以上です。
よろしくお願い致します。
おこめ (2014-12-17 (水) 16:06:46)
パッケージRcmdrを読み込んだのちplotMeans() を用いて2つの処理についての結果をグラフ化しました。
その際自動で凡例も挿入されるのですが、この凡例の編集(位置やフォントサイズ変更)がどうしてもできません。
また、legend() を用いると新たに別の凡例がグラフ内に挿入されてしまいます。
ぞ同挿入の凡例について、唯一凡例タイトルだけは
plotMeans(x$測定値,x$処理1,x$処理2,error.bars="se",legend.lab="xxx")
と書くことで変えることができました。
ですが特に編集したいフォントサイズについては編集方法がまったくわかりません。
検索していろいろ調べたのですが手がかりがつかめませんでした。
この自動で挿入される凡例の編集方法についてアドバイスいただけませんでしょうか。
どうぞよろしくお願いします。
data(Moore, package="car") interaction.plot(response = Moore$conformity, x.factor = Moore$fcategory, trace.factor = Moore$partner.status, pch = 19, col = 2:3, type = "b", lty = 1:2, legend = FALSE, ylim = c(0, 25)) i <- interaction(Moore$fcategory,Moore$partner.status) m <- by(Moore$conformity, i, mean) se <- by(Moore$conformity, i, function(x){sd(x)/sqrt(length(x))}) n1 <- nlevels(Moore$fcategory) n2 <- nlevels(Moore$partner.status) arrows(rep(1:n1, n2), m - 1.96 * se, rep(1:n1, n2), m + 1.96 * se, col = c(rep(2, n1), rep(3, n1)), code = 3, angle = 90, length = .1) legend("topleft", #位置 levels(Moore$partner.status), cex = 2, #フォントサイズ pch = 19, pt.cex = 1, col = 2:3, lty = 1:2, bty = "n")
lin (2014-12-15 (月) 15:44:48)
glmmMLの後にstepAICを行うと以下にエラー if (all(is.finite(c(n0, nnew))) && nnew != n0) stop("number of rows in use has changed: remove missing values?") : TRUE/FALSE が必要なところが欠損値ですと出るのですが、glmmMLにはstepAICは出来ないのでしょうか?
> dat <- data.frame(y = rbinom(100, prob = rep(runif(20), rep(5, 20)), size = 1), x1 = rnorm(100), x2 = rnorm(100), id = factor(rep(1:20, rep(5, 20)))) > stepAIC(glmmML(y ~ x1 + x2, data = dat, cluster = id)) Start: AIC=129.09 y ~ x1 + x2 以下にエラー if (all(is.finite(c(n0, nnew))) && nnew != n0) stop("number of rows in use has changed: remove missing values?") : TRUE/FALSE が必要なところが欠損値ですなお、北大の久保先生の日記(2003年11月05日)によると「glmmML の現時点での問題点だが…ついでに当然のごとくに stepAIC() とか使えん. これは自作するしかないなあ」だそうです。10年以上前の話なので現在はわかりませんが。
> glmmML:::nobs.glmmML function (object, ...) { object$n } > names(object) [1] "boot" "converged" "coefficients" [4] "coef.sd" "sigma" "sigma.sd" [7] "variance" "aic" "bootP" [10] "deviance" "df.residual" "cluster.null.deviance" [13] "cluster.null.df" "posterior.modes" "prior" [16] "terms" "info" "call"
> sink("glmmML.R") > glmmML:::glmmML > sink()作業ディレクトリに保存された glmmML.R を編集する
glmmML <- function (formula, family = binomial, data, cluster, weights,プログラムの最後の方に 1 行加える
class(res) <- "glmmML" res$n <- nrow(data) # この行を追加 res } # <environment: namespace:glmmML> # コメントアウト(もしくは削除)glmmML を使う前に,source("glmmML.R") を実行する。
> source("glmmML.R") > dat <- data.frame(y = rbinom(100, prob = rep(runif(20), rep(5, 20)), size = 1), x1 = rnorm(100), x2 = rnorm(100), id = factor(rep(1:20, rep(5, 20)))) > stepAIC(glmmML(y ~ x1 + x2, data = dat, cluster = id)) Start: AIC=132.29 y ~ x1 + x2 Df AIC - x1 1 131.06 <none> 132.29 - x2 1 133.73 Step: AIC=131.06 y ~ x2 Df AIC <none> 131.06 - x2 1 132.27 Call: glmmML(formula = y ~ x2, data = dat, cluster = id) coef se(coef) z Pr(>|z|) (Intercept) 0.2267 0.4243 0.5344 0.5930 x2 -0.4534 0.2645 -1.7144 0.0865 Scale parameter in mixing distribution: 1.513 gaussian Std. Error: 0.4668 LR p-value for H_0: sigma = 0: 0.0003127 Residual deviance: 125.1 on 97 degrees of freedom AIC: 131.1
時計 (2014-12-15 (月) 15:09:47)
お世話になります。
標記につきまして、devtool::install_githubがプロキシの関係で使えないので、zipファイルをダウンロードして、パッケージをインストールしています。
以前、ggbiplotをインストールしたことがあるのですが、やり方を失念してしまいました。
Google先生に聞いてみても、うまく、記事を捕まえきれません。
お忙しいところご迷惑おかけいたしますが、どうぞご教授ください。
QCUSER (2014-12-03 (水) 18:20:35)
qccを用いて管理図を表示させることを試みています。
qccコマンドの使用方法について質問させてください。
質問概要qcc.groups(data , sample)にてグループ化したmatrixを元にqccで管理図を表示する場合、横軸にデータ値のサンプル指標(第二引数sampleの値)を表示することはできますでしょうか?
例
タブ区切りのファイル「01_INPUT.txt」にロット、data01という列が存在した場合inputdata <- read.table("01_INPUT.txt", header=TRUE, sep = '\t') attach(inputdata) samplegrp <- qcc.groups(data01, ロット)によってマトリクス「samplegrp」が生成できます
> samplegrp 305-0 306-0 307-0 308-0 309-0 310-0 311-0 312-0 313-0 314-0 315-0 316-0 [1,] 52.89 52.93 53.06 53.06 53.02 53.08 53.12 52.95 52.8 52.93 52.95 53.02 317-0 318-0 319-0 320-0 321-0 322-0 323-0 324-0 325-0 326-0 327-0 328-0 [1,] 53.02 52.91 52.97 53 53.07 53.09 53.09 53.04 53.04 53.04 53.08 53.1 :このマトリクスを用いてqccコマンドにより管理図が表示されます
qcc(samplegrp, type="xbar.one", nsigmas=3, title="X管理図")しかしながら、"ロット"(上記サンプルデータでは'305-0'や'306-0')を横軸に表記する手段がわからない状態です。
qcc(samplegrp[1,], type="xbar.one", nsigmas=3, title="X管理図")としたときに出力される図でよいんでしょうか?? -- 河童の屁は,河童にあらず,屁である。 2014-12-03 (水) 19:06:22
Ryo (2014-12-02 (火) 17:38:50)
Rの仕様で計算結果が長い場合、ウインドウの大きさに合わせて結果が区切られたりします。それを区切らせないで結果を表示することは可能でしょうか。
(Rの結果の表示のウインドウの大きさを変更できますか?)
ABC
DEF
GHI
ではなくて
ABCDEFGHI
とtxtに保存したいです。
宜しくお願いします。
初心者X (2014-11-25 (火) 23:59:08)
# library(RMeCab) Q1 <- RMeCabDF(dat, 3)のようにしたら題名のようにエラーになりました。
datの中身は、ここでは書いていませんが代入しております。
どうしたらいいのでしょうか?
kana (2014-11-20 (木) 16:11:13)
heatmap関数を使っているのですが、ある一つの要素の値が突出して高いために、他の要素のカラーの違いが見分けられません・・・
「ある値以上では色が一定、それ以下はグラデーションで表示」にしたいのですが、どのようにしたら良いのか教えてもらえると助かります。
も (2014-11-19 (水) 17:12:27)
R超初心者です。Rcmdr(Rコマンダー)を使っています。
プーリングによるパネルデータ分析を試みているのですが、データ読み込み後library("plm") res_po <- plm(従属変数 ~ 独立変数A+独立変数B・・・ +独立変数X, data=データ名, model="pooling") summary(res_po)と入力して行っています。
ところが、Rコマンダーで「エラー」とだけ表示されてしまい、それが何のエラーかもわからないでいます。
他のデータセットではこれでパネルデータ分析できたのですが、なぜこちらではできないのでしょうか。
データセット自体は数値以外は入力されていません。
かな (2014-11-15 (土) 03:33:38)
"test_1", "test____2" など 数が不定な _ を全て1つの . に変えたいと思います。 "test.1" "test.2" としたいということです。gsub('[_]{+}', '.', c("test_1", "test____2"))とやってみましたが、できあがりの読点の数が1つになりません。ご教示よろしくお願いします。
3M (2014-11-13 (木) 10:18:27)
Windows 7 64bit版でRを使いたいのですが、Rが使用できるメモリの上限はいくつになるのでしょうか。32bit版と同じ2GBでしょうか。
宜しくお願いします。
Steps (2014-11-12 (水) 15:10:04)
はじめて,投稿をさせて頂きます。
RでVenn Diagramを作成したいのですが,下記のように,library(VennDiagram) draw.triple.venn(10,5,4,2,3,1,1, ind=TRUE, scaled=TRUE)と【scaled=TRUE】としてもデータサイズを領域の面積に反映することができません。
どのようにすれば,データサイズを反映した円のサイズにすることができるのでしょうか?
よろしくお願いいたします。
if (!exists("overrideTriple")) { r1 <- sqrt(100/pi) r2 <- r1 r3 <- r1 } else { r1 <- sqrt(area1/pi) r2 <- sqrt(area2/pi) r3 <- sqrt(area3/pi) }
> overrideTriple <- TRUE > grid.newpage(); draw.triple.venn(100,150,200,20,30,10,1)draw.triple.venn()は作りが甘く、中でハードコーディングが散見され、サンプルの組み合わせ次第では、大きさは変化しません。面積に対応させたベン図描画は、隠し機能程度に捉えた方がよいと思います。
ゆき (2014-10-26 (日) 13:35:40)
初めまして。
Rの多次元尺度構成法で扱えるデータ件数について質問があります。
6万件のデータ間の類似度(小数)をインプットにして多次元尺度構成法(isoMDS)を実行したところ、以下のようなエラーが表示されスクリプトが終了しました。invalid value of 'n'isoMDSは以下のような呼び出しをしております。
a <- read.csv(input, h=T, as.is=T, row=1, check.names=F) mds <- isoMDS(a, trace=F)エラーメッセージをもとにgoogleで検索していたら、isoMDSの中から実行されているcmdscaleにデータ件数のチェックが入っており、46340件を超えると終了しているようです。
(http://code.metager.de/source/xref/gnu/R/src/library/stats/R/cmdscale.Rの43行目)if(is.na(n) || n > 46340) stop("invalid value of 'n'")isoMDS以外ではどうかと思い、sammon、metaMDSでも同じデータをインプットにして試してみたのですが、上記のcmdscaleの件数チェックでひっかかり終了となってしまいました。
Rの関数を使って多次元尺度構成法を行う場合、46340件以上のデータを扱う方法はあるのでしょうか?
よろしくお願いします。
こあら (2014-10-17 (金) 08:29:34)
お世話になります。Rのコアへの割り当てについて疑問があります。
デュアルコアのCPUを搭載したパソコンでRを使用しているのですが、Rはひとつのコアしか使用しないという話を伺いました。では、Rを2つ起動するとひとつずつのコアを使うことになるのでしょうか。それともひとつのコアを2つのRで共有するのでしょうか。
宜しくお願いします。
えーけん (2014-10-16 (木) 16:21:37)
初めまして。
Windows7 で R x64 3.1.1を使用しています。
現在、Rでplsを実行しておりますが、
データのサンプル数によって、クロスバリデーションの分割数kを変更したいのです。
それは可能でしょうか?可能でしたら、方法を教えていただきたいです。
よろしくお願いします。
ひろ (2014-10-13 (月) 10:21:08)
初めて投稿します.
Mac OS X上でR 3.1.0を使用しています.
e1071パッケージのsvm関数について分からない点が有ります.
e1071のソースファイルsvm.RやRsvm.cもあたりましたが,
何となくやっていることは分かりますが,詳細まで理解することは出来ませんでした.
なので,ここで質問させていただきます.
詳しい方がおられましたらご教授ください.
次のように 10-fold cross validationでsvmのモデルを構築するとします.
model<-svm(factor(V1)~V2+V3+V4, data=testdata, cross=10)
このとき,modelとして出力されるのは,
10回の交差試験で最後に作られたモデルになるのでしょうか?
それとも,10回分の交差試験の結果が反映されたモデルになるのでしょうか?
あるいは私の考えている点がまるで見当違いでしょうか?
よろしくお願いします.
びぎなー (2014-09-29 (月) 18:12:11)
初めて投稿します。超初心者です。
利用環境は、windows 8 にてR version 3.1.1と追加パッケージとしてspatstatとsiarをロードしています。
テキストファイルデータの読み込み、生データのプロットはできたのですが、肝心のモデルのランでエラーが出ます。Selection: 2 Run SIAR for a single group. For this you will need to have input successfully some data in option 1. In this instance, the target isotope file must be a two column file with no group label in the first column. See the demo for more details on this function. Press <Enter> to continue... Choose the size of the model run: 1: Standard 2: Long 3: Very long Selection: 1 以下にエラー siarmcmcdirichletv4(data = siardata$targets, sources = siardata$sources, : (list) オブジェクトは 'double' に変換できませんお手数ですが、ご存じ方、対応、エラー原因についておしらせいただけたらと思います。何卒宜しくお願いします。
たまご (2014-09-22 (月) 18:17:03)
初めて投稿します。R言語初心者です。
page.rank.old(igraphというパッケージにある)という関数を使いたいのですが,以下のようなエラーが出てしまいます。> g <- random.graph.game(20, 5/20, directed=TRUE) > page.rank.old(g) [1] 0.06973880 0.09021035 0.03558664 0.01666512 0.07154547 0.04793332 0.07996897 0.05023446 0.03992723 0.07147081 [11] 0.03138601 0.02566091 0.09408276 0.04552462 0.04179698 0.03378557 0.00750000 0.02832452 0.09572176 0.02293570 警告メッセージ: In .Call("R_igraph_pagerank_old", graph, vids - 1, directed, niter, : At structural_properties.c:1379 :igraph_pagerank_old is deprecated from igraph 0.7, use igraph_pagerank insteadなんとかこのエラーを取り除きたいのです。よろしくお願いします。
Rのバージョン3.1.1
igraphのパッケージは最新
OS windows7