初心者のための R および RjpWiki に関する質問コーナー
以下の 4 つの「●項目」のどれかをクリック!!
● 新規投稿欄: --- その前に,「投稿における注意事項」を読んでから!
● このページの目次 --- 質問への回答・コメントの参照
● 最新のスレッド --- 最も最近に書き込まれた「親」記事(最新のコメントが付いた記事ではありません)
● Q&A (初級者コース) 過去の目次 --- 今までの 17 個の書庫の参照
参照は,個々の項目をクリック(質問への回答・コメントの参照も,個々の項目をクリック)
●● 新規投稿 ●●
まずは,「投稿における注意事項」を読んで,それに従ってください。
これに従わない場合には,回答が得られにくい場合があります。
HO0217 (2020-12-29 (火) 21:28:39)
「赤札と青札がある。確率1/2でどちらかを引く。
これを100回繰り返し、赤札を55回以上引く確率を求めよ。」
という問題を解くため、正規分布に近似して確率を求めると、
15.87%でした。
(これは私の計算結果で、答えは知りません。あってるとは思いますが、間違っているかもしれません)
近似ではなく、二項分布で計算してみようと思い、
以下のコードで確率を計算すると、約18.41%(出力は0.1841008)で、
近似とはやや違う結果となりました。
tmp_nu<-0
n_nu<-100
k_nu<-55
for(i in k_nu:n_nu){tmp_nu<-( choose(n_nu,i)*(1/2)^(i+(100-i)) )+tmp_nu}
tmp_nu
次に、シミュレーションで確率を見積もるために以下のコードを実行しました。
出力は0.13554となりました。
simu_0_nu<-100 #100枚引く。
simu_1_nu<-1000000 # 何セット試すか。
result_0_ve<-rep(NA,simu_0_nu)
result_1_ve<-rep(NA,simu_0_nu)
result_2_ve<-rep(F,simu_1_nu)
set.seed(123)
for(i in 1:simu_1_nu){for(j in 1:simu_0_nu){ result_0_ve<-rnorm(simu_0_nu,0,1) #平均0の正規分布は確率1/2で0を越える数値を出す result_1_ve<-result_0_ve>0 #0を越えたら真 } result_2_ve[[i]]<-sum(result_1_ve)#真の数を数える}
sum(result_2_ve>55)
sum(result_2_ve>55)/simu_1_nu
ちなみに、set.seed(123)を
set.seed(777)にすると0.135447
set.seed(789)にすると0.136265
set.seed(111)にすると0.136006
set.seed(222)にすると0.135414
となりました。
どうやら偶然ではなく、私がシミュレーションに使ったコードでは、
他の計算よりも小さい値になっているようです。
何が原因でシミュレーションと二項分布の計算でこんなにも違ってしまうのでしょうか?
わかる方がいらっしゃいましたら、教えてくださると助かります。
よろしくお願いいたします。
> set.seed(1) > N <- 1000000 > n <- replicate(N, {sum(rnorm(100) > 0)}) > sum(n > 55) / N [1] 0.135948 > 1 - pbinom(55, 100, 0.5) [1] 0.1356265 > sum(n >= 55) / N [1] 0.184649 > 1 - pbinom(54, 100, 0.5) [1] 0.1841008
元Rユーザー (2020-12-27 (日) 22:33:22)
全盛期とは比較にならないほどの過疎ぶりですね・・・時代は完全にpythonになったのだなと思います。
R初心者 (2020-11-08 (日) 22:39:38)
パネルデータでplm分析を行ってますが、下記のメッセージが出て対応に苦慮しております。
警告メッセージ:
1: pdata.frame(data, index) で:duplicate couples (id-time) in resulting pdata.frame to find out which, use e.g. table(index(your_pdataframe), useNA = "ifany")2: is.pbalanced.default(index1, index2) で:
duplicate couples (id-time)
恐らく重複エラーなのかもしれませんが、下記を見ると年次などの下線部がエラーの様ですが(?)、削除はしたくなく対応方法を知りたいです。宜しくお願いいたします。
コード PBR 業種コントロール 年次 `1人当たり単体人件費`… 連結子会社数 売上高研究開発費 <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 T1301 0.915 0.630 2019 5.87 26 0.0013 2 T1301 0.908 0.618 2018 5.88 24 0.00120 3 T1301 0.872 0.644 2017 6.18 24 0.0011 4 T1301 0.867 0.678 2016 6.15 25 0.00120
Rビギナー (2020-10-28 (水) 01:22:23)
SVM実装の際に、package(kernlab)を使用しています。ksvm関数を使用すると以下のようなエラーが出ます。これはどういう意味でしょうか?
SVM <- ksvm( data_Mic.dummy ~AveMaxTemp7+TP1yp+TN1yp+AveWind7, #モデル式data=data_Mic, kernel ="rbfdot", #カーネル関数の設定 kpar=list(sigma=0.2), #カーネル関数のパラメータ C=1, cross=10).local(x, ...) でエラー:
No Support Vectors found. You may want to change your parameters 追加情報: 警告メッセージ: .local(x, ...) で: 強制変換により NA が生成されました
R初心者 (2020-10-20 (火) 12:55:09)
R初心者で色々わかっていないので、質問の仕方が間違ってたらすみません。
Rで関数の処理を行いたいのですが、
解析結果のデータは
dds <- 解析結果
に格納しました。
その大量のデータの中で図示したい5つだけをリストアップし
dataという下記のようなデータフレームを作りました。
name ID
1 aaaaa 001
2 bbbbb 002
3 ccccc 003
4 ddddd 004
5 eeeee 005
処理したい関数が下記のように3つでpng→plotCount→dev.offでワンセットです。
図示したいのが1つであれば
png("aaaaa.png")
plotCounts(dds, gene="001", intgroup="condition" )
dev.off
でデータフレームの一行目のものが図として保存されます。
ですが連続してdataの二行目、三行目...と自動でループ処理させたくて、
forやlapplyなどを試したのですが、引数がnameとIDの二つということもあり、うまくプログラムを回せませんでした。
どなたかお詳しい方に上記の関数でpng→plotCount→dev.off→png→plotCount→dev.off→...を自動的に回す方法をご教授頂きたいです。
よろしくお願いします。
for(i in 1:nrow(dds)){ name_ <- dds$name[i]; ID_ <- dds$ID[i] }ループの中でpng, plotCount, dev.offを順次呼び出せば動くと思います。
うみねこ (2020-07-24 (金) 22:13:58)
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
回帰直線の描き方と、その統計情報の出し方について、教えて頂けないでしょうか。
9列×6行の表があり、その2列目(length)と6列目(weight)にlog変換をして、RMA法を使って回帰直線を描きたいです。gx.rmaというファンクションを見つけましたが、以下のコードではエラーが出て動きません。
出来たら、95%予測区間や95%信頼区間等についても出し方を知りたいです。
どうぞご教授よろしくお願いいたします。
data<- read.table('body.txt', header=T)
row.names(data)=data[,1]
length <- setNames(log(data[,2]),data[,1])
weight <- setNames(log(data[,6]),data[,1])
model <-gx.rma(length,weight)
model
> set.seed = 1234567 > data = as.data.frame(matrix(runif(54), 6, 9)) > data[,1] = letters[1:6] > row.names(data)=data[,1] > length <- setNames(log(data[,2]),data[,1]) > weight <- setNames(log(data[,6]),data[,1]) > model <-gx.rma(length,weight) Reduced Major Axis for length and weight Means = -1.05 -0.679 SDs = 0.7428 0.8641 Corr = 0.5295 N = 6 Fit = 28% SE 95% CLs Slope = 1.163 0.4028 0.1277 <-> 2.199 Intercept = 0.5422 0.518067 -0.7895 <-> 1.874 Accept hypothesis that RMA is (0,1) > model $n [1] 6 $mean [,1] [,2] [1,] -1.049833 -0.6789889 $sd [,1] [,2] [1,] 0.7428316 0.8640773 $corr [1] 0.5295494 $a0 [1] 0.5421989 $a1 [1] 1.163221 $sea0 [1] 0.5180675 $sea1 [1] 0.4028333他の人が追試できるように質問すべし。 -- 2020-07-26 (日) 17:41:28
ifplot if a x-y plot of the independent variables is required set ifplot = TRUE. The plot is equi-scaled and the 1:1 line is added. If ifrma = TRUE ifplot will be set to TRUE.よくわからないまま,適当にプログラムを書いてもだめです。オンラインヘルプくらい読みましょう。それと,エラーメッセージを良く読めば,どこが間違えているか対処法もわかります(わかりやすく書かれているとはいえないでしょうが,それが問題解決の唯一の鍵ですからね) -- 2020-07-27 (月) 14:41:47
Usage gx.rma(xx1, xx2, x1lab = NULL, x2lab = NULL, log = FALSE, ifplot = FALSE, ifrma = FALSE, ifcoeffs = FALSE, ifform = FALSE, iftest = FALSE, ...)あなたの例の場合だと,
gx.rma(length, weight, x1lab="Length(cm)", x2lab="Weight(g)", ifplot=TRUE, ifrma=TRUE)のようになる。 -- 2020-07-27 (月) 16:27:48
catdogcat (2020-07-24 (金) 18:20:51)
マッチングを試みましたが下記のエラーが出ました
Treatment indicator ('Tr') must be a logical variable---i.e., TRUE (1) or FALSE (0)
比較する群の変数は因子としてあり 0.1 となっているのですが
解決策がわかりません。
ご教授お願い致します。
(2020-07-22 (水) 23:44:38)
下記コードをpgm.cppに保存後、Rcpp::sourceCpp("pgm.cpp")でコンパイルし
test(matrix(c(1,2,3,4),2,2))を実行したのですが1行1列の値が返ってこずエラーでRが落ちます。もし良ければご助言いただけないでしょうか。
#include<Rcpp.h> #define MAX 100 using namespace std; // [[Rcpp::export]] int test(Rcpp::IntegerMatrix mtx){ int matrix[MAX][MAX]; for(int i=0; i < mtx.rows(); ++i){ for(int j=0; j < mtx.cols(); ++j){ matrix[i][j] = mtx(i,j); }} return matrix[0][0]; }
がんば (2020-07-22 (水) 08:35:12)
昨年はおせわになりました。実験結果をグラフにすると直線状ではなく「くの字」状に曲がった結果となる場合もあるのですがこの時の特異点をRで一発算出するような手段がないでしょうか?「データをソートして下限側から徐々に近似曲線を構築するのと上限側から構築するのをそれぞれ行っていって次の点がそれまでの近似曲線のバラツキ範囲外になる点を求める」ような操作をする(人の目視確認の場合はこんな手順だと思います)手段を意図してます。
動作環境:sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
Matrix products: default
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] compiler_4.0.2 tools_4.0.2
りょう (2020-06-30 (火) 21:38:04)
Rによる多変量解析と言う本でRを動かしているのですが、グラフ化すると日本語の部分が□□□のようになります。
よくわからないのが、"plot", "plotmeans"などでは日本語表示されるのですが、xyplot, histogramだと文字化けすることです。以下がその時のコードです。
jhk <- read.csv('人事評価結果.csv')
head(jhk, 3)
|ID|性別|部署|年代|協調性|技能|知識|ストレス|
|1|M|A部|中堅|70|65|71|53|
|2|F|B部|熟練|45|62|70|46|
・・・・・・
par(family = "HiraKakuProN-W3") #一応これ試してみました
library(lattice, gplots)
histogram(~ストレス, data = jhk, breaks = 20, type='count') #文字化けする
xyplot(知識~技能|年代+部署, data=jhk) #文字化けする
plotmeans(協調性~性別, data=jhk, p=0.95, ylim=c(49, 54)) #文字化けしない
・macOS Catalina バージョン10.15.5
・R studio version 4.0.2 です。この前に使用していたバージョン3.6.3でも同様の状態でした。
・CSVファイルはUTF-8で保存されています。
・par(family = "HiraKakuProN-W3") なども試しました。
GoogleやCRAN, マニュアルなどで既に調べたのですがわからず、困っているのでご教授いただけると幸いです。
pdf("test.pdf") # ひつようなら他のパラメータの設定も histogram(~ストレス, data = jhk, breaks = 20, type='count') #文字化しない xyplot(知識~技能|年代+部署, data=jhk) #文字化けしない plotmeans(協調性~性別, data=jhk, p=0.95, ylim=c(49, 54)) #文字化けしない dev.off()どんなもんだ? -- 2020-07-14 (火) 14:04:24
ぼう (2020-05-14 (木) 12:25:32)
R4.00でggplotを使おうと思っていますが、エラーが出てしまいます。
次のコマンドを実行すると、下のような結果が出てきてしまいます。> install.packages("ggplot2", dependencies = TRUE) > library(ggplot2) > str(iris) 'data.frame': 150 obs. of 5 variables:~ $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ... > ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))~ ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) でエラー: 関数 "ggplot" を見つけることができませんでした
show (2020-03-10 (火) 12:58:28)
ccf(rw,rw2)と入力した場合、どちらを基準にしてlagを取っているのでしょうか?
> set.seed(12345) > n <- 10 > x <- rnorm(n) > y <- rnorm(n)ラグ lag = 2,で ccf してみる
> print(ccf(x, y, lag, plot=FALSE), digits=7) Autocorrelations of series ‘X’, by lag -2 -1 0 1 2 0.1416173 0.5327757 -0.2716881 0.2595251 -0.1681542自分で相互相関係数を計算するときに必要なもの。
> mean.x <- mean(x) # x の平均(全部使う) > mean.y <- mean(y) # y の平均(全部使う) > ss.x <- var(x)*(n-1) # x の変動(全部使う) > ss.y <- var(y)*(n-1) # y の変動(全部使う)相互相関係数を計算する。lag = 2
> sum((x[(lag+1):n]-mean.x) * (y[1:(n-lag)]-mean.y) / sqrt(ss.x * ss.y) [1] -0.1681542上の ccf の lag = 2 の下に書かれている数値 -0.1681542 と一致しているでしょ。
私は誰でしょう? (2020-03-01 (日) 21:20:52)
今まで,最新の R にするために(新しもの好きなので)
あ,見ての通り,Mac ユーザです。
curl https://mac.r-project.org/el-capitan/R-3.6-branch/R-3.6-branch-el-capitan-sa-x86_64.tar.gz | sudo tar fvxz - -C /
をやっていたのですが,2 ヶ月ほど前から,実行結果が思わしくなくなっています。
つまるところ,件の URL はアクセス不可ということのようで,アップデートは出来ません。
念の為
http://mac.r-project.org/el-capitan/R-3.6-branch/R-3.6-branch-el-capitan-signed.pkg
を使えばアップデートは出来ます。
curl -O http://mac.r-project.org/el-capitan/R-3.6-branch/R-3.6-branch-el-capitan-signed.pkg sudo installer -pkg ./R-3.6-branch-el-capitan-signed.pkg -target /とかでお茶を濁しては... -- 何処の誰かは知らないけれど 2020-03-02 (月) 16:03:50
Rビギナー (2020-02-26 (水) 10:12:45)
お世話になります.
下記のように1~3まで連番のファイルを読み込みたいのですが,例えば2番のファイルが無い場合にそのまま1,3のファイルを読み込んでプログラムが止まらないようにするにはどうしたらいいでしょうか.
try関数で可能かと思いやってみたのですが,だめでした.
ご教示ください.
よろしくお願いいたします.
==ここからpoint <- 1:3 # for文を回す数を設定 for (i in point) { mypath <- file.path(getwd(), paste0(i,"t2-1.csv")) df <- assign(paste0("data",i), read.csv(mypath, header = T)) df <- data.frame(df) df head(df) df$X <- strptime(df$X,"%Y/%m/%d %H:%M'%S") head(df) df$X <- as.POSIXlt(df$X,"%Y/%m/%d %H:%M:%S",tz="GMT0") head(df) #https://qiita.com/tktz/items/733c37b1d6102ae52120 library(xts) df$X <- align.time(df$X-10*60/2,10*60) head(df) date = paste0("date",i) Temp = paste0("Temp",i) RH = paste0("RH",i) colnames(df) <- c(date,Temp,RH) head(df) mypath <- file.path(getwd(), paste0(i,"t1.csv")) write.csv(df,mypath) }
mypath <- file.path(getwd(), paste0(i,"t2-1.csv")) if (! file.exists(mypath)) next
files = list.files(getwd(), pattern="[0-9]*t2-1.csv") for (f in files) { # describe what you want to do }
マリン (2020-02-23 (日) 10:13:04)
2つの時系列のデータ(約80個)の相関(どのくらい類似性があるか)を
見たいのですが、方法を教えてください。
(2020-02-14 (金) 14:34:30)
Book1というcsvファイルのデータを用いてGLMMによる解析を行ったのですが、固定効果の値を用いた回帰線がうまく引けません。
csvファイルおよび解析を行ったスクリプトをBook1GLMMというファイル名でアップロードしましたので、ご教授いただけますと幸いです。
よろしくお願いいたします。
data <- read.csv("Book1.csv") data # update.packages # install.packages("lme4") library(lme4) par(family = "HiraKakuProN-W3") model1 <- glmer(POMN ~ log(siltclayN) + (1 | Place), family = Gamma(link = "log"), data = data) summary(model1) place = c("HA", "TN", "OG", "YN", "KG", "WA", "AS") # データフレームではこちらを使っているのでこれでなきゃだめ place2 = c("半田山", "田野", "小川", "与那", "上賀茂", "西粟倉", "足寄") # 凡例用には別のものを用意する pch = c(25, 18, 17, 16, 15, 9, 8) col = c("black", "red", "cadetblue", "magenta", "brown", "coral", "darkorchid") plot(data$siltclayN, data$POMN, pch = rep(pch, each = 5), col = rep(col, each = 5), cex = 3, cex.axis = 2) legend("bottomright", legend = place2, pch = pch, col = col, cex = 2) xx <- seq(min(data$siltclayN), max(data$siltclayN), length = 100) # yy <- exp(1.1136 + 0.4651 * xx) # そもそも間違い # lines(xx, yy, lwd = 2) for (i in seq_along(place)) { # 7 本の曲線を引くんでしょ? newdata = data.frame(siltclayN=xx, Place=rep(place[i], 100)) yy = predict(model1, newdata=newdata, type="response") lines(xx, yy, col=col[i]) }
(2020-02-06 (木) 21:14:35)
GLMMなどで、目的変数に用いるデータが連続値で0以上であればガンマ分布を用いると統計の教科書等には書いてあるのですが、連続値で0以上(データの最小値は0)のデータでガンマ分布を用いて解析しようとすると
「non-positive values not allowed for the 'gamma' family」というエラーが出ます。
また、同じデータで線形混合効果モデルなら結果は出るのですが、「boundary (singular) fit: see ?isSingular」という警告?が出るせいなのかランダム効果を考慮した回帰線が一本しか出ません。
解決策などありましたら、お教えいただけますと幸いです。
> library(lme4) > d = read.csv("data.csv") > model1 <- glmer(A ~ log(B) + (1|Place),f amily=Gamma(link="log"),data=d) eval(family$initialize, rho) でエラー: non-positive values not allowed for the 'gamma' familyusing d2
> d2 = d[d$A > 0, ] > model1-2 <- glmer(A~log(B) + (1|Place), family=Gamma(link="log"), data=d2) > model1-2no error happend.
model2<-lmer(NitMAOMrecover~MAOMCN+(1|Place),data=example) summary(model2) place=c("HA","TN","OG","YN","KG","WA","AS") pch=c(25,18,17,16,15,9,8) col=c("black","red","cadetblue","magenta","brown","coral","darkorchid") plot(example$B,example$A,pch=rep(pch,each=5),col=rep(col,each=5),cex=3,cex.axis=2) legend("bottomright",legend=place,pch=pch,col=col,cex=1.5) xx<-seq(min(example$B),max(example$B),length=1000) for(i in seq_along(place)){ yy<-predict(model2,newdata=data.frame(B=xx,Place=rep(place[i],1000)),type="response") lines(xx,yy,col=col[i],lwd=2)}
ra (2020-01-27 (月) 11:58:45)
R初心者です。
GLMMで解析を行った後、散布図に回帰線を引きたいのですが、predict関数を読み込ませようとすると(オブジェクト"Place"がありません)というエラーが出ます(Placeはランダム効果です)。このエラーを解消し、回帰線を引くにはどうすれば良いでしょうか?
入力したコマンドを載せておきます。
よろしくお願いいたします。
model1<-glmer(POMN~log(siltclayN)+(1|Place),family=Gamma(link="log"),data=data)
plot(data$siltclayN,data$POMN,pch=c(25,18,17,16,15,9,8),cex=3,cex.axis=2)
legend("bottomright",legend=c("HA","TN","OG","YN","KG","WA","AS"),pch=c(25,18,17,16,15,9,8),cex=2)
xx<-seq(min(data$siltclayN),max(data$siltclayN),length=100)
yy<-predict(model1,newdata=data.frame(siltclayN=xx),type="response")
lines(xx,yy,lwd=2)
POMN <- c(data$POMN) siltclayN <- c(data$siltclayN + Place) dataframe <- data.frame(POMN, siltclayN) model1 <- glmer(POMN~log(siltclayN) + (1|Place1), family=Gamma(link="log"), data=dataframe) plot(dataframe$siltclayN, dataframe$POMN, pch=c(25,18,17,16,15,9,8), cex=3, cex.axis=2) legend("bottomright", legend=c("HA","TN","OG","YN","KG","WA","AS"), pch=c(25,18,17,16,15,9,8),cex=2) xx <- seq(min(dataframe$siltclayN), max(dataframe$siltclayN), length=100) yy <- predict(model1, newdata=data.frame(siltclayN=xx), type="response")-- 2020-01-27 (月) 23:14:23
> df = data.frame(x=c(3,2,1,3,5), f=factor(c(1,2,2,3,3)), y=c(2,4,7,5,6)) > fit = lm(y ~ x + f, data=df) # f may not be a factor > predict(fit) # this prediction uses data-frame df 1 2 3 4 5 2.0 5.4 5.6 5.7 5.3if you predict with another data-frame, the data-frame must contain 'x' and 'f' following newdata contains 'x' and 'f'. first 5 elements are same in df(df$x, df$f), last 3 elements is exactly new data
> newdata = data.frame(x=c(3,2,1,3,5, 2,3,5), f=factor(c(1,2,2,3,3, 1,2,2))) > predict(fit, newdata) 1 2 3 4 5 6 7 8 2.0 5.4 5.6 5.7 5.3 2.2 5.2 4.8 # first five values are identical to previous prediction. last 3 values are new prediction.do you understand?? -- 2020-01-28 (火) 16:28:06
siltclayN <- c(data$siltclayN + Place) dataframe <- data.frame(POMN, siltclayN)if Place is a factor variable you cant add to data$siltclayN. 'data$siltclayN + Place' cause an error. -- 2020-01-29 (水) 14:47:36
library(lme4) data = read.csv("Book1.csv") model1 <- glmer(POMN ~ log(siltclayN) + (1 | Place), family = Gamma(link = "log"), data = data) summary(model1) place = c("HA", "TN", "OG", "YN", "KG", "WA", "AS") pch = c(25, 18, 17, 16, 15, 9, 8) col = c("black", "red", "cadetblue", "magenta", "brown", "coral", "darkorchid") plot(data$siltclayN, data$POMN, pch = rep(pch, each = 5), col = rep(col, each = 5)) # , cex=3, cex.axis=2) legend("bottomright", legend = place, pch = pch, col = col) # ,cex=2) xx <- seq(min(data$siltclayN), max(data$siltclayN), length = 100) for (i in seq_along(place)) { yy <- predict(model1, newdata = data.frame(siltclayN = xx, Place = rep(place[i], 100)), type = "response") lines(xx, yy, col = col[i]) }
(2020-01-26 (日) 22:45:01)
半角・全角が混在する文字列からバイト数を指定して、部分文字列を抽出したいのですが、どのような関数がありますでしょうか。
例えば
x <- "あaいbうc"
という文字列から3-5byte目を抽出したいです。
("aい"という部分文字列を抽出したいです。)
substringは文字数を指定する関数のため、byte単位で抽出が不可能なようです。
お手数ですがご教示お願いいたします。
> x <- "あaいbうc" > charToRaw(x) [1] e3 81 82 61 e3 81 84 62 e3 81 86 63「あ」は3バイト文字なので途中で切られて、3-5byte目は「82 61 e3」です。これは「あ」の3バイト目、1バイト文字の「a」、「い」の1バイト目です。
> x <- "あaいbうc" # UTF-8: あ == \xe3\x81\x82 > xx = iconv(x, "utf-8", "euc-jp") > xx [1] "\\xa4\\xa2a\\xa4\\xa4b\\xa4\\xa6c" # EUC-JP: あ == \xa4\xa2 > Encoding(xx) = "bytes" > iconv(substr(xx, 3, 5), "euc-jp", "utf-8") [1] "aい"cp932 uses 2 bytes for 1 japanese character, too
> x <- "あaいbうc" > yy = iconv(x, "utf-8", "cp932") > yy [1] "\x82\xa0a\x82\xa2b\x82\xa4c" # CP932: あ == \x82\xa0 > Encoding(yy) = "bytes" > iconv(substr(yy, 3, 5), "cp932", "utf-8") [1] "aい"do you understand? -- 2020-01-28 (火) 11:38:51
TY (2020-01-07 (火) 15:59:04)
シミュレーションで同じ関数を繰り返し(10^5~10^6回程度)実行する場面を想定しています.
例えば,以下のsample_dataでREP毎にlm(y~x)を実行したいです.
for文で実行することはできるのですが,一般にapply系関数の方が実行が速いと聞き,
探しています.apply系関数に関する知識は,tapply関数にmean関数を適用できる,
tapply(sample_data$y, sample_data$REP,mean)
程度のレベルです.
【sample_data】y x REP1 133 3.9 1
2 81 -2.3 1
3 104 -1.2 1
4 89 0.7 1
5 142 4.0 1
6 74 -2.9 1
7 140 3.9 1
8 170 4.4 1
9 128 1.6 1
10 107 1.2 1
11 49 -4.3 2
12 79 -2.9 2
13 77 -3.2 2
14 125 1.8 2
15 82 -1.1 2
16 132 2.6 2
17 99 -0.0 2
18 140 2.1 2
19 140 4.9 2
20 88 -1.1 2