我明天参加一个大型的编程比赛,我使用R。
时间是主要因素(7个编码问题仅需2小时)。 问题与数学有关。
在定义函数时,我想写“f”而不是“function”。 这可以完成,我有代码这样做,但我失去了它,找不到它。
我在哪里可以找到度数输入的sin()函数,而不是弧度?
(可选)是否有任何特定于算法的任务视图或库。
编程竞赛的任何提示?
我为比赛准备了以下备忘单: http://pastebin.com/h5xDLhvg
========编辑:==========
所以我终于有时间记下我的经验教训了。
编程比赛非常有趣,但不幸的是我得分不是很高。我排在前50%,但我的目标是进入前25%。
主要问题是编程的时间非常短,总共只需2个小时。但我必须阅读问题描述,而且我还需要一些时间将结果粘贴到网络表单等中,所以它更像是90分钟的编程。
希望12月的下一场比赛能延长时间,比如3-4个小时。组织者说也许会是这样。
此外,比赛没有互联网访问,我的移动接待工作也没有真正起作用。
对我而言,主要的教训是你必须使用你日常使用的语言才能获得真正的机会。特别是,如果只有大约90分钟的时间来编程。由于我在日常工作中使用的是haskell而不是R,我认为R不是最好的选择。在比赛期间,我混淆了haskell和R函数定义,并且我编写了太多小错误来编程得足够快。
比赛的好处是,大约有80名参赛者共获得了大约2万美元的奖金。因此,前25%的参与者每人获得500至1500美元。此外,我认为排名前15%的人可以立即找到一家赞助商IT公司的工作。
所以这是一个双赢的局面。这很有趣,而且你可以获得奖金。此外,IT公司非常高兴,因为他们可以访问顶级程序员。
我利用这个机会与IT决策者交流。其中一个来自一家大银行。我大胆地建议他们考虑转换到Scala进行开发(来自Java的转换)。还要考虑使用R和Haskell。这很有趣,他们甚至说他们已经看过Scala了!
有趣的是,我最好的朋友之一在比赛中取得了很好的成绩。他只有19岁,但他在前20%中排名第一,获得了500美元的奖金。他打败了我和我的6所大学,他们都拥有可敬的计算机科学学位。我的朋友程序更像是黑客风格,但他的速度非常快。
排名前10的人使用: 1)Java 2)C#和 3)C ++ (前10名中没有其他编程语言!)。 我认为唯一合理得分的编程语言是Ruby。
对于下一次比赛,选择的编程语言可能是haskell。出于一个原因,为haskell找到2个队友比为R编程更容易。最多可以有3人组成团队。
我的理想情景是一个非常轻量级的框架,我可以同时使用多种编程语言进行比赛。这样,主代码可以用haskell编写(所有队友都可以编程)。一些特定的函数可以用R,Mathematica,甚至其他编程语言(如python / sage)编写。
这听起来有点矫枉过正。但我认为这将是非常有用的。就像一个函数,它有一个矩阵作为参数并返回一个矩阵。然后这个框架工作从R代码自动生成RESTful服务,所以我可以从任何编程语言调用R函数。矩阵只是作为JSON数据(或其他一些序列化)传递。好的,但这不是主题......
最后一些经验教训作为子弹列表:
非常感谢'Iterator'帮助他的职位!!
答案 0 :(得分:24)
我将回答一个相关但又不同的问题。没有冒犯,但你的原始建议对于编程竞赛来说似乎并不明智。在这种情况下花费的大部分时间是设计答案和调试(或者更好,避免调试的需要)。
相反,我将回答这个问题:“R中的哪些关键资源对快速原型设计很有用,重点是能够快速查找资源,能够快速调试,以及能够快速调查数据?如果我需要使用数值优化方法和代数系统,我应该调查什么?“
以下是我的答案:
example()
,确定从哪里获取小插曲和教程(来自CRAN上的软件包页面),并简要了解demo()
。sos
库,掌握findFn
。Rprof()
。先把它旋转一下。如果您的代码涉及很多迭代,您也可以使用compiler
包。简而言之: 您不想在计算机上等待。 您还可以查看foreach
和doSMP
或doMC
你可以将工作分配到不同的核心。要汇总结果,请熟悉plyr
和ldply
等方法以及标准*apply
函数,例如lapply
和apply
;另一个值得了解的好事是rapply
。 (如果您需要处理大量内容并且需要一些时间,请查看mclapply
或.parallel
函数的plyr
参数。)debug()
和browser()
hash
包(类似于Perl和Python哈希表)并学习如何使用digest
来解决那些太长而无法用于{的问题。 {1}}(参见this question了解参考资料)hash
或plot
以及ggplot2
,hist
和其他一些方式准备一些基本示例图。其他。如果你还不知道boxplot
,那么推迟,但你应该熟悉它。如果您碰巧使用了大量数据,请确保知道ggplot2
。如果您必须与数据进行互动,请了解hexbin
及其中的有趣工具,例如iplots
,iplot
和平行坐标图(ihist
)。 ipcp
以转换和操作其中一些对象。)plyr
- 对于您可能对数据框架和矩阵执行的许多操作而言,它非常有效。data.table()
和RSQLite
,尽管这些可能与数学竞赛无关。答案 1 :(得分:8)
对于(1),您可以执行类似
的操作f <- function(..., body)
{
dots <- substitute(...)
body <- substitute(body)
f <- function()
formals(f) <- dots
body(f) <- body
environment(f) <- parent.env(environment())
f
}
允许你编写,例如g <- f(x, y, body=x+y)
,但我不确定你能走多远。
答案 2 :(得分:5)
对于(2),你可以这样做:
sindeg <- function(x) sin(x*pi/180)