1.4 R: 文献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1安装第一步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
下面的文献解释怎样渐进地用R,在初级水平(如果"standard deviation" 和"gaussian distribution" 表达式没有吓着你的话,一切都好说)。
http://cran.r-project.org/doc/contrib/SimpleR.pdf
## 没有找到对对象,时过境迁,网页更新调整,此网址不再有效
其它基本文献和练习,见German-speaking people
http://cran.r-project.org/doc/contrib/s.pdf
## 没有找到对对象,此网址不再有效
1.4.2 参考手册 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
R中提供参考手册:仅用问号键入哪个文献开头的命令名就可以获得
?round
对于保留字或非字母命令,用双引号
?"for"
?"[["
如果我不知道命令名(这很正常),使用"help.search"或"apropos"。
help.search("stem")
apropos("stem")
第一,"help.search"搜索每一个地方,尤其是是那些还没有载入的包,第二,apropos("stem")搜索路径,如当前可提供的所有函数和变量。
你很可能还可以阅览HTML(R启动你的网页游览器)
help.start()
= sc_help_start.png
如果你连在网上,你也可以看看R帮助列表
TODO: URL # 可能是在UNIX下有效,Windows无效
你可以通过它来在R内用RSiteSearch函数搜索。
TODO: give an example # 可能是在UNIX下有效,Windows无效
有一些PDF文件在/usr/lib/R/library/*/doc/:下常常有一个PDF版本的参考手册(文件名就是库名),但有时稍有不同,它提供更多教学性质的解释。
## 大多数负责的程序包,都提供这类PDF的文件,只是提供方式不一样,
## 但现在可能更多的包的PDF并没有放到程序包中,
## 你可以根据你的需要存包处下载或到包的开发者处下载。
## 注意下面的部分包可能是过时了的,与现在新发行的R不兼容,
## 请到R的官方网页查询,别抱怨,不恰当的或有更优秀的,原有的就应当更新或淘汰。
% cd /usr/local/lib/R/library/<br />
% ls */doc/*pdf<br />
adehabitat/doc/classes.pdf<br />
AlgDesign/doc/AlgDesign.pdf<br />
arules/doc/arules-classes.pdf<br />
arules/doc/arules.pdf<br />
arules/doc/incidenceMatrix.pdf<br />
asypow/doc/asypow.pdf<br />
asypow/doc/asypow.statlib.pdf<br />
bayesSurv/doc/cgd1.pdf<br />
bayesSurv/doc/KomarekLesaffre2004.pdf<br />
bayesSurv/doc/tandmob.pdf<br />
BHH2/doc/BHH2.pdf<br />
bim/doc/bim.pdf<br />
bindata/doc/artdatagen.pdf<br />
BradleyTerry/doc/BradleyTerry-overview.pdf<br />
BsMD/doc/BsMD.pdf<br />
CDNmoney/doc/CDNmoney-guide.pdf<br />
CGIwithR/doc/CGIwithR-overview.pdf<br />
coin/doc/coin.pdf<br />
ctv/doc/ctv-howto.pdf<br />
DBI/doc/DBI.pdf<br />
DBI/doc/RS-DBI-origianl.pdf<br />
Devore6/doc/Devore6.pdf<br />
dr/doc/drdoc.pdf<br />
dse1/doc/dse1-guide.pdf<br />
dse1/doc/dse-guide.pdf<br />
dse2/doc/dse2-guide.pdf<br />
e1071/doc/svmdoc.pdf<br />
e1071/doc/svm.pdf<br />
evdbayes/doc/guide.pdf<br />
evd/doc/guide21.pdf<br />
exactLoglinTest/doc/exactLoglinTest.pdf<br />
flexmix/doc/flexmix-intro.pdf<br />
gbm/doc/gbm.pdf<br />
gbm/doc/oobperf2.pdf<br />
gbm/doc/shrinkage-v-iterations.pdf<br />
gdata/doc/gregmisc.pdf<br />
genetics/doc/genetics_article.pdf<br />
genetics/doc/LD.pdf<br />
geoRglm/doc/geoRglmintro.pdf<br />
gridBase/doc/gridBase.pdf<br />
grid/doc/displaylist.pdf<br />
grid/doc/frame.pdf<br />
grid/doc/grid.pdf<br />
grid/doc/grobs.pdf<br />
grid/doc/interactive.pdf<br />
grid/doc/locndimn.pdf<br />
grid/doc/moveline.pdf<br />
grid/doc/nonfinite.pdf<br />
grid/doc/plotexample.pdf<br />
grid/doc/rotated.pdf<br />
grid/doc/saveload.pdf<br />
grid/doc/sharing.pdf<br />
grid/doc/viewports.pdf<br />
haplo.stats/doc/help.haplo.stats.pdf<br />
haplo.stats/doc/manualHaploStats.pdf<br />
hierfstat/doc/hierfstat.pdf<br />
hopach/doc/hopachManuscript.pdf<br />
hopach/doc/MSS.pdf<br />
hwde/doc/hwde.pdf<br />
intcox/doc/aneur_km.pdf<br />
intcox/doc/aneur_para.pdf<br />
intcox/doc/comb1einzel.pdf<br />
intcox/doc/intcox.pdf<br />
ipred/doc/ipred-examples.pdf<br />
kernlab/doc/kernlab.pdf<br />
kinship/doc/releasep.pdf<br />
lasso2/doc/Manual-wo-help.pdf<br />
ldDesign/doc/assoc_bfdesign.pdf<br />
limma/doc/limma.pdf<br />
limma/doc/usersguide.pdf<br />
lme4/doc/Implementation.pdf<br />
lmtest/doc/lmtest-intro.pdf<br />
locfdr/doc/locfdr-example-FDR-Plot.pdf<br />
locfdr/doc/locfdr-example-Histogram.pdf<br />
locfdr/doc/locfdr-example.pdf<br />
Matrix/doc/Comparisons.pdf<br />
Matrix/doc/Introduction.pdf<br />
maxstat/doc/maxstat.pdf<br />
mcmc/doc/demo.pdf<br />
mcmc/doc/metrop.pdf<br />
mfp/doc/mfp.pdf<br />
mitools/doc/smi.pdf<br />
mlmRev/doc/MlmSoftRev.pdf<br />
mlmRev/doc/StarData.pdf<br />
msm/doc/msm-manual.pdf<br />
multcomp/doc/Rmc.pdf<br />
mvtnorm/doc/MVT_Rnews.pdf<br />
orientlib/doc/orientlib_paper.pdf<br />
pastecs/doc/pastecs.pdf<br />
pps/doc/pps.pdf<br />
ProbForecastGOP/doc/vignette.pdf<br />
proto/doc/abcdef.pdf<br />
proto/doc/cloning3.pdf<br />
proto/doc/ooproto.pdf<br />
proto/doc/oproto.pdf<br />
proto/doc/otest.pdf<br />
proto/doc/proto.pdf<br />
proto/doc/protoref.pdf<br />
qvalue/doc/manual.pdf<br />
qvalue/doc/pHist.pdf<br />
qvalue/doc/qHist.pdf<br />
qvalue/doc/qPlots.pdf<br />
qvalue/doc/qvalue.pdf<br />
R2HTML/doc/R2HTML.pdf<br />
R2WinBUGS/doc/benzolsw.pdf<br />
R2WinBUGS/doc/countssw.pdf<br />
R2WinBUGS/doc/expectedsw.pdf<br />
R2WinBUGS/doc/plot.pdf<br />
R2WinBUGS/doc/R2WinBUGS.pdf<br />
Rcmdr/doc/Getting-Started-with-the-Rcmdr.pdf<br />
resper/doc/huber-sim.pdf<br />
RII/doc/RIIoverview.pdf<br />
rmetasim/doc/islandtheta.pdf<br />
rmetasim/doc/mismatch.pdf<br />
rmetasim/doc/struct.pdf<br />
rmetasim/doc/Using_Rmetasim.pdf<br />
R.oo/doc/Bengtsson.pdf<br />
RUnit/doc/RUnit.pdf<br />
sandwich/doc/sandwich.pdf<br />
SASmixed/doc/Usinglme.pdf<br />
scatterplot3d/doc/barplot.pdf<br />
scatterplot3d/doc/binorm.pdf<br />
scatterplot3d/doc/business.pdf<br />
scatterplot3d/doc/colorcube.pdf<br />
scatterplot3d/doc/drill1.pdf<br />
scatterplot3d/doc/drill2.pdf<br />
scatterplot3d/doc/elements.pdf<br />
scatterplot3d/doc/helix.pdf<br />
scatterplot3d/doc/hemisphere.pdf<br />
scatterplot3d/doc/meta.pdf<br />
scatterplot3d/doc/residuals.pdf<br />
scatterplot3d/doc/s3d.pdf<br />
setRNG/doc/setRNG-guide.pdf<br />
smoothSurv/doc/paper1.pdf<br />
smoothSurv/doc/paper2.pdf<br />
SparseM/doc/SparseM-002.pdf<br />
SparseM/doc/SparseM.pdf<br />
spatstat/doc/Intro.pdf<br />
spatstat/doc/Quickref.pdf<br />
spdep/doc/auckland.pdf<br />
spdep/doc/sids.pdf<br />
StatDataML/doc/StatDataML.pdf<br />
strucchange/doc/strucchange-intro-data.pdf<br />
strucchange/doc/strucchange-intro-Fstats-plot.pdf<br />
strucchange/doc/strucchange-intro-ME-null.pdf<br />
strucchange/doc/strucchange-intro-OLS-CUSUM.pdf<br />
strucchange/doc/strucchange-intro.pdf<br />
strucchange/doc/strucchange-intro-ts-used.pdf<br />
survBayes/doc/survBayes.pdf<br />
tframe/doc/tframe-guide.pdf<br />
vegan/doc/vegan-FAQ.pdf<br />
zoo/doc/zoo.pdf<br />
zoo/doc/zooref.pdf
## 上面就是对应包的帮助手册,由于包更新和新加包很快,你查到的会有看不同。
1.4.3 图形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
下面的文献(很有启蒙意义,甚至它所用语言我不懂——可能是西班牙语)解释了R生成各类图形的细节。至少,游览它一下。
http://cran.r-project.org/doc/contrib/grafi3.pdf # 能进,但不是英语
也可以看看P. Murrell的书:
http://www.stat.auckland.ac.nz/~paul/RGraphics/rgraphics.html
# 能进 有效,学习制图的地方
http://www.stat.columbia.edu/~cook/movabletype/archives/2005/04/a_new_book_on_r.html ## 能进,类似论坛性质,或常见问题解决之类
1.4.4 更多技术文献 . . . . . . . . . . . . . . . . . . . . . . . 8
心理学中的方差分析
http://cran.r-project.org/doc/contrib/rpsych.html
## 找不到,进不去
线性回归
http://cran.r-project.org/doc/contrib/Faraway-PRA.pdf
## 能进,一份不错的学习资料
每一样东西(相当完整,但是太多啦:没有先前的题目工具,简直难以忍受,但的确是好东西,非常好的练习资料):
http://cran.r-project.org/doc/contrib/usingR.pdf
## 网址有效,初学R的好资料
1.4.5手册中的图形 . . . . . . . . . . . . . . . . . . . . . . 8
## 此部分现在R官方系统已有较大改进,原作者说的已经可能是“历史上的问题”。
我说,较早HTML版本的手册可以获得(查看 /usr/lib/R/),但是缺少注解……(开发团队注意到这个问题,在近来的特性中可以解决)
可以如下方式来添加它们(这种方式可能有点粗暴)
######################################################
# 在需要安装时,从source下载和安装每样东西,即把能下的、能装的都装上。
# 这主要取决于你系统:这里提的是Linux Mandriva (正式名 "Mandrake")
urpmi readline-devel gcc-g77
# 在一个临时目录中下载、编译和安装R.
wget [url]http://stat.ethz.ch/CRAN/src/base/R-2.1.0.tgz[/url]<br />
tar zxvf R-2.1.0.tgz<br />
cd R-2.1.0/<br />
./configure --prefix=$HOME/spool/JUNK/R --with-readline --enable-R-shlib<br />
make -j 5<br />
make install<br />
PATH=$HOME/spool/JUNK/R/bin:$PATH
# 现在,下载所有的包,就是CRAN、BioConductor、OmegaHat,还有the "Simple" package, by J. Verzani (for the violinplots)
cd ..<br />
wget -r -l 1 -np -nc -x -k -E -U Mozilla cran.r-project.org/src/contrib/<br />
wget -r -l 1 -k -E -U Mozilla -R zip [url]http://www.bioconductor.org/repository/release1.5/package/html/index.html[/url]<br />
wget -r -l 2 -k -E -U Mozilla -R zip [url]http://www.omegahat.org/ <br />
wget -x [url]http://www.math.csi.cuny.edu/Statistics/R/simpleR/Simple_0.5.tar.gz[/url]
# 全都把它装上,(在此,"**"的意思是任何目录和子目录,不管它是什么路径——我认为这种句法是指定到zsh:最粗心的用户能通过`find -name "*.tar.gz"`找到)。
for i in **/*.tar.gz<br />
do<br />
echo Installing $i >> nohup.out<br />
echo Installing $i<br />
nohup R CMD INSTALL $i<br />
done
这可能使一些包损坏:很正常,这种问题是丢失一些开发包造成的(如readline,上面提到):所要求的库在那里,但是所要求来运行使用它们的程序(lib*.之类的文件)没有,而不是那些用来编译程序的文件(如*.h文件)。
然后,我们来计算一下全部包中文件的图片。
#! perl -w<br />
use strict;<br />
my $n = 0;<br />
<br />
# Writing R files<br />
mkdir "Rdoc" || die "Cannot mkdir Rdoc/: $!";<br />
my @libraries= `ls lib/R/library/`;<br />
foreach my $lib (@libraries) {<br />
chomp($lib);<br />
print STDERR "Processing library \"$lib\"\n";<br />
print STDERR `pwd`;<br />
my @pages = grep /\.R$/, `ls lib/R/library/$lib/R-ex/`;<br />
chdir "Rdoc" || die "Cannot chdir to Rdoc: $!";<br />
mkdir "$lib" || die "Cannot mkdir $lib: $!";<br />
chdir "$lib" || die "Cannot chdir to $lib: $!";<br />
open(M, '>', "Makefile") || die "Cannot open Makefile for writing: $!";<br />
print M "all:\n";<br />
foreach my $page (@pages) {<br />
chomp($page);<br />
print STDERR " Processing man page \"$page\" in library \"$lib\"\n";<br />
my $res = "";<br />
$res .= "library($lib)\n";<br />
$res .= "library(ts)##VZ##\n";<br />
$res .= "library(lattice)##VZ##\n";<br />
$res .= "library(nls)##VZ##\n";<br />
$res .= "library(nlme)##VZ##\n";<br />
$res .= "library(MASS)##VZ##\n";<br />
$res .= "identify <- function (...) {}##VZ##\n";<br />
$res .= "x11()##VZ##\n";<br />
open(P, '<', "../../lib/R/library/$lib/R-ex/$page") || <br />
die "Cannot open lib/R/library/$lib/R-ex/$page for reading: $!";<br />
# Tag the lines where we must copy the screen (between two commands)<br />
while(<P>) {<br />
s/^([^ #}])/try(invisible(dev.print(png,width=600,height=600,bg="white",filename="doc$n.png")))##VZ##\n$1/<br />
&& $n++;<br />
$res .= $_;<br />
}<br />
$res .= "try(invisible(dev.print(png,width=600,height=600,bg=\"white\",filename=\"doc$n.png\")))##VZ##\n"; $n++;<br />
close P;<br />
# We discard the line in the following cases:<br />
# The previous line ends with a comma, an opening bracket, an "equal" sign<br />
$res =~ s/[,(=+]\s*\n.*##VZ##.*?\n/,\n/g;<br />
# The previous line is empty<br />
$res =~ s/^\s*\n.*##VZ##.*\n/\n/gm;<br />
# The previous line only contains a comment<br />
$res =~ s/^(\s*#.*)\n.*##VZ##.*\n/$1\n/gm;<br />
# The nest line starts with a { TODO: check (boot / abc.ci)<br />
$res =~ s/^.*##VZ##.*\n\s*\{/\{/gm;<br />
# We write the corresponding number<br />
$res =~ s/doc([0-9]).png/doc00000$1.png/g;<br />
$res =~ s/doc([0-9][0-9]).png/doc0000$1.png/g;<br />
$res =~ s/doc([0-9][0-9][0-9]).png/doc000$1.png/g;<br />
$res =~ s/doc([0-9][0-9][0-9][0-9]).png/doc00$1.png/g;<br />
$res =~ s/doc([0-9][0-9][0-9][0-9][0-9]).png/doc0$1.png/g;<br />
open(W, ">", "${lib}_${page}") || die "Cannot open ${lib}_${page} for writing: $!";<br />
print W $res;<br />
close W;<br />
print M "\tR --vanilla <${lib}_${page} >${lib}_${page}.out\n";<br />
my $p = $page; <br />
$p =~ s/\.R$//;<br />
system 'cp', "../../lib/R/library/$lib/html/$p.html", "${lib}_$p.html";<br />
}<br />
print M "\ttouch all\n";<br />
close(M);<br />
chdir "../../" || die "Cannot chdir to ../../: $!";<br />
}
我们编译它们(可能需要花上几个小时,它可能崩溃)
cd Rdoc/<br />
for i in *<br />
do<br />
(<br />
cd $i<br />
make<br />
)<br />
done
我比较喜欢下面的方式:
killall xscreensaver<br />
\ls -d */ | perl -p -e 's/(.*)/cd $1; make/' | perl fork.pl 5
无论哪里fork.pl 允许你同时启动几个进程,但是不要启动太多啦。
#! /usr/bin/perl -w<br />
use strict;<br />
my $MAX_PROCESSES = shift || 10;<br />
use Parallel::ForkManager;<br />
my $pm = new Parallel::ForkManager($MAX_PROCESSES);<br />
while(<>){<br />
my $pid = $pm->start and next; <br />
system($_);<br />
$pm->finish; # Terminates the child process<br />
}
我们清除PNG文件,因而来生成和我们来写入HTML文件。
for i in */<br />
do<br />
(<br />
cd $i<br />
perl ../do.it_2.pl<br />
)<br />
done
函数do.it_2.pl之处含有:
#! perl -w<br />
use strict;<br />
<br />
# 删除空的或重复的PNG文件显示为<br />
STDERR "Computing checksums\n";<br />
use Digest::MD5 qw(md5);<br />
my %checksum;<br />
foreach my $f (sort(<*.png>)) {<br />
if( -z $f ) {<br />
unlink $f;<br />
next;<br />
}<br />
local $/;<br />
open(F, '<', $f) || warn "Cannot open $f for reading: $!";<br />
my $m = md5(<F>);<br />
close F;<br />
if( exists $checksum{$m} ){<br />
unlink $f;<br />
} else {<br />
$checksum{$m} = $f;<br />
}<br />
}<br />
<br />
# 把它们全都转成HTML <br />
print STDERR "Converting to HTML\n";<br />
open(HTML, '>', "ALL.html") || warn "Cannot open ALL.html for writing: *!";<br />
select(HTML);<br />
print "<html>\n";<br />
print "<head><title>R</title></head>\n";<br />
print "<body>\n";<br />
foreach my $f (<*.R.out>) {<br />
my $page = $f;<br />
$page =~ s/\.R.out$//;<br />
# Read the initial HTML file<br />
if( open(H, '<', "$page.html") ){<br />
my $a = join '', <H>;<br />
close H;<br />
$a =~ s#^.*?<body>##gsi;<br />
$a =~ s#<hr>.*?$##gsi;<br />
print $a;<br />
} else {<br />
warn "Cannot open $page.html for reading: $!";<br />
}<br />
open(F, '<', $f) || warn "Cannot open $f for reading: $!";<br />
#print "<h1>$f</h1>\n";<br />
print "<h2>Worked out examples</h2>\n";<br />
print "<pre>\n";<br />
my $header=1;<br />
while(<F>) {<br />
if($header) {<br />
$header=0 if m/to quit R/;<br />
next;<br />
}<br />
if( m/(doc.*png).*##VZ##/ ){<br />
my $png = $1;<br />
next unless -f $png;<br />
print "</pre>\n";<br />
print "<img width=600 height=600 src=\"$png\">\n";<br />
print "<pre>\n";<br />
}<br />
next if m/##VZ##/;<br />
next if m/^>\s*###---/;<br />
next if m/^>\s*##\s*___/;<br />
next if m/^>\s*##\s*(alias|keywords)/i;<br />
s/\&/\&/g;<br />
s/</</g;<br />
print;<br />
}<br />
close F;<br />
print "</pre>\n";<br />
print "<hr>\n";<br />
}<br />
print "</body>\n";<br />
print "</html>\n";<br />
close HTML;
有一个未知原因,PNG文件有一个透明的背景:我用ImageMagick把它转成白背景(white.png文件是一个白PNG文件,大小相同,600x600,用Gimp建立的),这个问题已经好久啦,我还不清楚原因。
for i in */*png<br />
do<br />
echo $i<br />
composite $i white.png $i<br />
done
我没有考虑HTML文件潜在连接的数据(不太明白,但……)
perl -p -i.bak -e 's#<a\s.*?>##gi; s#</a>##gi' **/ALL.html
这个HTML文件应该称为index.html:
rename 's/ALL.html/index.html/' */ALL.html
"rename"所指向的程序:
#!/usr/bin/perl -w<br />
use strict;<br />
my $reg = shift @ARGV;<br />
foreach (@ARGV) {<br />
my $old = $_;<br />
eval "$reg;";<br />
die $@ if $@;<br />
rename $old, $_;<br />
}
在此有一个很小的结果片段(2.7Mb, 268 pictures,而整个文献有93MB和2078个图像——记住,这个仅是R1.6,现在的就更多啦)
URL:Rdoc/index.html
特别是,某人可能只对含有最多图片的PKG包感兴趣。
% find -name "*.png" | perl -p -e 's#^\./##;s#/.*##' | sort | uniq -c | sort -n | tail -20<br />
26 sm<br />
27 cluster<br />
29 ade4<br />
29 nls<br />
29 spatial<br />
31 mgcv<br />
34 car<br />
38 cobs<br />
41 MPV<br />
44 mclust<br />
45 MASS<br />
45 vcd<br />
49 grid<br />
60 gregmisc<br />
64 pastecs<br />
70 qtl<br />
77 splancs<br />
88 strucchange<br />
90 waveslim<br />
113 spdep
<未完待续>