......关于执行时间和/或记忆.
如果不是这样,请使用代码段进行证明.请注意,矢量化的加速不计算在内.增速必须来自apply(tapply,sapply,...)本身.
在Python中我习惯于在第8个Python增强提议之后通过一个名为pep8的自动但可配置的工具对我的代码进行"样式检查" .
在RI不知道.谷歌有一个风格指南,但是:
Dirk,Alex,在你的答案中,你指着我的漂亮的打印机,但在我看来,这将过度一件事而不是另一件事:代码将自动编辑以遵循风格,而没有针对选择不当的标识符发出警告.
我已经使用Emacs/ESS很长一段时间了,我熟悉Hadley的R风格推荐.我想在ESS中遵循这些约定,比如运算符周围的空格,逗号后面的空格和后面的if语句,花括号之前等等.
是否有人甚至不愿意遵循这种风格指南?恕我直言,官方风格的建议相当谦虚,他们对风格一无所知.Google R风格指南与我在JavaScript中编码时使用的类似,所以这是禁忌.
长话短说:有没有(e)LISP技能愿意为ESS实施(哈德利)风格指南的人?
首先,这个问题不是试图解决具体问题.作为R的新手,我也在努力创建更高效的代码和代码构建过程.获得关于不同编程方法甚至样式的观点是这个问题背后的原因.
以下是三种编码方式:
首先是示例数据:
stackexample <- c(52,50,45,49.5,50.5,12,10,14,11.5,12,110,108,106,101,104)
dim(stackexample)<- c(5,3)
方法一:在函数中进行数学运算而不定义任何对象
 ertimesIVCV1 <- function (x) 
{ (solve(var(log((x[-nrow(x),])/(x[-1,])))))%*%
  ((1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1)}
ertimesIVCV1(stackexample)
方法二:在函数中定义对象,然后操纵这些对象
    ertimesIVCV2 <- function (x) 
{ IVCV <- solve(var(log((x[-nrow(x),])/(x[-1,]))));
  retsexcess <- (1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1;
  IVCV%*%retsexcess}
ertimesIVCV2(stackexample)
方法三:定义几个函数并在"类似摘要"函数中调用这些函数
IVCV <- function (x) {solve(var(log((x[-nrow(x),])/(x[-1,]))))}
retsexcess <- function(x) (1+(log(x[1,]/(x)[nrow(x),])))^(1/nrow(x))-1
ertimesIVCV3 <- function (x) {IVCV(x)%*%retsexcess(x)}
ertimesIVCV3(stackexample)
所以都产生了相同的答案:
           [,1]
[1,]  1.4430104
[2,] -0.1365155
[3,] 11.8088378
但正如你可以看到三种不同的方法.
是否存在嵌入式函数的最佳数量,还是应该总是尝试明确列出所有数学?函数中有多少级别的函数是最佳的?这两种方法的计算速度都优越吗?对此有经验吗?你怎么看待这个?欢迎任何意见或建议或链接,谢谢!
黑麦
我的重新编码尝试
df$test[(df$1st==(1:3) & df$2nd <= 4)] <- 1
df$test[(df$1st==(1:3) & df$2nd <= 5)] <- 2
df$test[(df$1st==(1:3) & df$2nd <= 6)] <- 3
导致"longer object length is not a multiple of shorter object length"警告和大量的NA以s df$test,即使一些重新编码正常工作.
我错过了什么?任何帮助赞赏.
DW
我是一名经验丰富的R用户,拥有一支由R开发人员组成的团队.但是,我发现当我们的程序开始增长时,管理和调试变得非常困难,并且作为一个团队工作.
我是一个C++/Java/Python用户,虽然这看起来与这三者中的Python最相似,但我仍然觉得很难从已知的Java和Python"最佳实践"推断到R.
寻找一本书或教程讨论编码约定和R软件工程原理,也许是OOP的东西?