先看看R语言的内置函数是怎么编的,可是看不懂,R是用什么语言啊?能否推荐点资料给俺看看。多谢了!
R语言的内置函数是用什么语言编的?
R的大多数函数都是R语言写的,还有一大部分是C语言,极少部分Fortran。你下载R的源代码包解压用R统计一下就知道了。
## 列举所有文件<br />
x = list.files('R-2.10.1', recursive = TRUE)<br />
## 替换掉扩展名之前的字符<br />
y = gsub('.*\\.', '', grep('\\.', x, value = TRUE))<br />
## 然后统计扩展名的频数:<br />
> sort(table(y))
结果:
[data]y
3 LIB Rnw Rterm ac aux bib bmp
1 1 1 1 1 1 1 1
bot charset common dat dif doc ftn fw
1 1 1 1 1 1 1 1
guess install java jpeg m modreg notes packages
1 1 1 1 1 1 1 1
portsrc rej rpath rtest rtf sub tiff top
1 1 1 1 1 1 1 1
ts unix windows zi zip 0 1 Rin
1 1 1 1 1 2 2 2
class csv db header hide ico sed sin
2 2 2 2 2 2 2 2
site tex y css manifest rda sh sty
2 2 2 3 3 3 3 3
S isl def fd jpg pl pm eps
4 4 5 5 5 5 5 6
tab mk txt rc texi html tcl Snw
6 7 7 10 10 11 11 13
m4 gz tgz enc pdf pot gmo save
13 15 15 18 19 20 24 38
f win afm in mo po h c
45 47 87 97 150 172 240 600
R Rd
732 1292
[/data]
</p>
回复 第2楼 的 谢益辉:有意思,还真没想过可以这样弄。[s:11]
精彩!哈哈
回复 第2楼 的 谢益辉:你把没有扩展名的给落了。还有一部分脚本语言没有扩展名(不包括README ChangeLog之类)[s:17]
哦还有,好多函数是写在一个文件里的,与其数多少个文件,不如数有多少个函数,或者数一下各种语言有多少行代码。。。我好像是太闲了
短短三行代码,我研究了那么长时间...道理都弄明白了,但还是是有机个小问题向大家请教.
1.
x = list.files(path=".")
中的路径设置只能打开R的工作目录下的文件吗? 我想打开非R工作目录下的文件时出现问题 例如:x = list.files(path="C:\Program Files")
就不行,非得改变工作目录才行。。。2.关于函数中的".*\\."看的不明白,还有
gsub("([ab])", "\\1_\\1_", "abc and ABC")
中的ab为什么要用这么多括号快起来啊?再者\\1_\\1_(还有\\2) 是什么意思?sub(' +$', '', str)
中的+$又是什么意思? 查资料也查不到,哪位高人能帮我讲讲,或者给我推荐点资料,谢谢了!最后谢谢给位的帮助,受益匪浅![s:13]
</p>
回复 第6楼 的 ming_uld:
1、用.
或..
指的是相对路径,前者是当前文件夹(对于R来说就是工作空间),后者是当前文件夹的上一层目录。另外你的第二条语句应该用C:\\
或C:/
而不是C:\
。
2、这个是正则表达式,可以参考专门的资料。
回复 第7楼 的 Ihavenothing:十分感谢!学习中..
回复 第5楼 的 Feng Li:有道理,不过俺没这么多闲工夫 [s:11]
这个统计扩展名的创意确实相当精彩!
回复 第6楼 的 ming_uld:对2中,我觉得“\\1_”表示对字符串数组[ab]中的字符a、b逐个在"abc and ABC"读取的意思吧,每读到一个相同的字符后面加_。“\\1_\\1_"表示重复读取字符一次吧。\\2就表示读取到相同字符直接以_来代替。我试了程序,好像是这样的,类似C语言。
"[]"加个()才可以指包含a、b元素的数组吧,不然读取的时候应该是ab一起读了,因为R中全是用小括号来操作函数的。
呵呵 愚见~[s:13]
回复 第11楼 的 peiyuyang:你的解释还真让我不得不澄清一下了:
关于
<br />
gsub("([ab])", "\\1_\\1_", "abc and ABC")<br />
# 返回结果:[1] "a_a_b_b_c a_a_nd ABC"<br />
1、中括号的意思才是取中间的任一字符(即a或b);
2、小括号的意思是里面匹配的内容将会被后面用到(也就是后面的\1);
3、\1、\2……等是正则表达式中用来指代前面的各个小括号中的内容的;
4、而把\1写成\\1,是R字符串的转义写法;
5、那个下划线就是下划线,不表示其他含义。</p>
更详细的强烈建议大家参考相关正则表达式的教程或手册,而不要胡猜误导别人!!
回复 第12楼 的 yanlinlin82:好啊,终于有人回答了!真是不好意思,我是看没人答复ming_uld,所以斗胆调了半小时程序猜测的,回复中的表达也是很不确定的,刚接触R几天,想起C语言里也有转义的写法了。可是\\1和\\2为什么一个可以显示出所有字符,一个不能显示出[ ]中的字符呢?同样是指代……
可以请教一个问题吗?为什么我的程序中会出现一下错误呢?(感觉数据没问题啊,我把它传到附件了,希望您能抽出点宝贵时间看看)急需指点~而且时间紧张,谢谢了啊!
> plot(x,y,type="n",cex=0.4,xlab="lnGDP",ylab="lnUD")
错误于xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
回复 第12楼 的 yanlinlin82:不好意思,我刚才一直在做程序,终于发现它的问题了!本来就是要多思考才行,只因为着急,所以才跑论坛上问。打扰了,还望见谅~[s:17]