R 期望可以在很多平台上运行,包括Linux,Unix的各种变种,32位的Windows版本 以及MacOS X。 因此,无论通过直接加入 R 的基本分发还有通过增加插入式的包来 扩展 R,最好不要依赖一些只有很少平台支持的属性,如果避免的话。 特别,尽管大多数R开发人员使用 GNU 工具, 他们最好不要用 GNU 的扩展成为标准工具。 尽管一些其它的软件包明确依赖于 GNU make 或 GNU C++ 编译器一类的软件, R 则不需要。 然而,R 是一个 GNU 项目, GNU 代码编写标准的精髓要尽量符合。
下面的工具可以在写R的扩展时可以被“安全地假定”。
VPATH机制的
情况下才能工作。
Windows特异的makefiles文件可以假定 GNU make 3.75或更高版本, 因为该平台上没有任何可见的make版本。
这些工具有 POSIX 标准,但它们可能不完全支持。 基本的特性可以从一些书里面得到,如 Brian W. Kernighan 和 Rob Pike 编写的The UNIX Programming Environment。 注意,regexp里面的|是一个扩展的regexp, 而这在所有的grep 或 sed版本中都不支持。开源社区基本规范 (The Open Group Base Specifications),第6卷, 在技术层面上等同于 ISO/IEC 9945 和 IEEE Std 1003.1 (POSIX), 2004。 它可以从下面的地址中获得 http://www.opengroup.org/onlinepubs/009695399/mindex.html。
在Windows里面,大多数用户不会安装这些工具,在操作你的包的时候, 你不需要它们的存在。但是,用户如果从源码安装你的包,他们就需要这些工具, 因为已经假定他们已经按“R安装和管理”(R Installation and Administration)手册附录里面 的“Windows工具集”部分获得这些工具了。 重定向不能指望通过命令 system 获得, 因为它不使用标准的SHELL脚本 (不管Bourne SHELL)。
此外,在一些特定工作的时候,还需要下面的工具。
代码最好以一种其他人可以理解的方式编写。这点也是比较重要的。
在修补问题特别有用。同时,还要以自我描述的方式给变量命名,
注释代码和对代码适当格式化。 R核心开发小组推荐使用
4作为R和C(也包括PERL)代码的基本缩排方式,2作为
Rd 形式的文档的缩排方式。
Emacs 用户可以把下面的部分放在他们的启动文件中
实现这种缩排方式。
(对于 GNU Emacs 20:对于 GNU Emacs 21 或后续版本,or later
设置 c-default-style 为 "bsd"和
c-basic-offset 为 4。)
;;; C
(add-hook 'c-mode-hook
(lambda () (c-set-style "bsd")))
;;; ESS
(add-hook 'ess-mode-hook
(lambda ()
(ess-set-style 'C++)
;; Because
;; DEF GNU BSD K&R C++
;; ess-indent-level 2 2 8 5 4
;; ess-continued-statement-offset 2 2 8 5 4
;; ess-brace-offset 0 0 -8 -5 -4
;; ess-arg-function-offset 2 4 0 0 0
;; ess-expression-offset 4 2 8 5 4
;; ess-else-offset 0 0 0 0 0
;; ess-close-brace-offset 0 0 0 0 0
(add-hook 'local-write-file-hooks
(lambda ()
(ess-nuke-trailing-whitespace)))))
(setq ess-nuke-trailing-whitespace-p 'ask)
;; or even
;; (setq ess-nuke-trailing-whitespace-p t)
;;; Perl
(add-hook 'perl-mode-hook
(lambda () (setq perl-indent-level 4)))
(Emacs的C和R模块的`GNU'格式使用的基本缩进为2, 但这样在窄字符的时候让结构不甚明了。)