自分のRのデータフレームの内容を、メールやblogなどで伝え、他人のRで再現させる関数
#10/31追記
データフレームの内容をテキスト化 - r-statistics-fanの日記
なんとdput()関数で目的のことは出来るようです。
苦労する必要はなかったんや~
##追記終了
メールやblogなどで、自分の環境上のデータフレームを記載したいことがある。
しかし、a <- c(1,3,5)などといちいち手入力するのは大変。
データフレームの内容を自動でそのまま、Rにコピペできる形にできたら楽ですよね。
そんな関数。
#2014.10.30一部バグ修正
以前作った関数を少し改良した。
慶応がベストのデータも、これを使った。
まずエクセルに入力、次にRに読み込み、df2txt()でコピペ
という流れだ。日本語でも行けたのでまずは良しとする。
ただ、まだ日付がなあ。例外的なものにも弱いし。
df2txt <- function(new.data = "dat", dat = data){ #新しく作るdata, txt化するデータ nr <- nrow(dat) nc <- ncol(dat) cn <- colnames(dat) cat(new.data, "<- data.frame(numeric(", nr, "))\n") for (i in 1:nc){ cat(paste(new.data, "$", cn[i], "=", "c(", paste(dat[,i], collapse=","), ")\n")) } cat(new.data, "<-", new.data, "[,-1]\n") } df2txt("data2", dat) dat <- data.raw df2txt <- function(new.data = "dat", dat = data){ #新しく作るdataの名前, txt化するデータフレーム名 nr <- nrow(dat) nc <- ncol(dat) cn <- colnames(dat) col.factor <- as.numeric(sapply(dat, is.factor)) name.factor <- names(which(sapply(dat, is.factor))) col.numeric <- as.numeric(sapply(dat, is.numeric)) name.numeric <- names(which(sapply(dat, is.numeric))) col.chr <- as.numeric(sapply(dat, is.character)) name.chr <- names(which(sapply(dat, is.character))) col.other <- as.numeric((col.factor + col.numeric + col.chr)==0) name.other <- cn[which(col.other == 1)] if(sum(col.numeric) != 0){ for (i in name.numeric){ cat(i, "=", "c(", paste(dat[,i], collapse=","), ")\n") } } if(sum(col.chr) != 0){ for (i in name.chr){ cat(i, "=", "as.character(c(", paste("\x22", dat[,i], "\x22", collapse=",", sep = ""), "))\n") } } if(sum(col.factor) != 0){ for (i in name.factor){ cat(i, "=", "as.factor(c(", paste("\x22", dat[,i], "\x22", collapse=",", sep = ""), "))\n") } } if(sum(col.other) != 0){ for (i in name.other){ cat(i, "=", "as.character(c(", paste("\x22", dat[,i], "\x22", collapse=",", sep = ""), "))\n") } } cat(new.data, "<- data.frame(", paste(cn, "=", cn, collapse = ","), ")\n") } df2txt("data", data) #とするとdataの内容が例えば下記のように出力される good = c( 2170,1838,1041,580,1596,496,374,520,250,256,209,231,163,144,230,113,140,103,217,110,65,123,57,50,24,68,22,16,21,18,139 ) bad = c( 536,684,328,115,1161,79,108,322,62,81,41,105,52,59,165,52,82,50,171,66,28,88,22,18,0,44,5,0,9,7,128 ) univ = as.character(c( "慶応大学","早稲田大学","京都大学","一橋大学","東京大学","東京工業大学","大阪大学","明治大学","東北大学","東京理科大学","国際基督教大学","同志社大学","神戸大学","北海道大学","上智大学","名古屋大学","関西学院大学","筑波大学","中央大学","九州大学","東京外国語大学","横浜国立大学","電気通信大学","津田塾大学","ハーバード大学","千葉大学","広島大学","国際教養大学","小樽商科大学","京都工芸繊維大","立教大学" )) data <- data.frame( univ = univ,good = good,bad = bad ) #上記をblogなどに貼り付ければ、他の人にもdataの内容が再現できる