• R语言
  • 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]