[速成法] R
night_stalker
2010-09-30
好久没 helloworld 一把了,这次的目标是 R !
What is R and download and documents: http://www.r-project.org/ 下面开始各种动手。 交互 shell 搜索 ?dim 全文搜索 ??dim 自动完成 as.<按 tab> 基本语法 类型 1 double 1L 整数 1+0i 复数 typeof(1) NULL 空表或者未赋值 'a' 字符串 "a" 字符串 赋值 a <- 2 + 2 函数 f <- function(n) { n * 4 } f(12) 赋值形式的函数 (think about x.class = "foo") class(x) <- "foo" 向量和 range v <- c(1,2,4) v <- 1:12 矩阵是有 dim 和 dimnames 属性(一般为 NULL)的向量 3行4列矩阵: v <- 1:12 dim(v) <- c(3,4) 操作符分为 3 种(unary, binary, vectorized) - Minus, can be unary or binary + Plus, can be unary or binary ! Unary not ~ Tilde, used for model formulae, can be either unary or binary ? Help : Sequence, binary (in model formulae: interaction) * Multiplication, binary / Division, binary ^ Exponentiation, binary %x% Special binary operators, x can be replaced by any valid name %% Modulus, binary %/% Integer divide, binary %*% Matrix product, binary %o% Outer product, binary %x% Kronecker product, binary %in% Matching operator, binary (in model formulae: nesting) < Less than, binary > Greater than, binary == Equal to, binary >= Greater than or equal to, binary <= Less than or equal to, binary & And, binary, vectorized && And, binary, not vectorized | Or, binary, vectorized || Or, binary, not vectorized <- Left assignment, binary -> Right assignment, binary $ List subset, binary 用 backtick 可以把操作符转换成函数: `+`(1,2) + 和 * 等操作符可以直接操作 vector statement 有值,下面 statement 的值为 9 { x <- 4 x + 5 } 注:和 javascript 一样,statement 的花括号不产生局部作用域 控制结构 statement if (statement1) statement2 else statement3 repeat block_statement while (statement1) statement2 for (name in vector) statement1 switch (statement, list) switch 例: > y <- "fruit" > switch(y, fruit = "banana", vegetable = "broccoli", meat = "beef") [1] "banana" 基本运算的一些法则 循环法则: 1.如果让两个元素个数不同的结构相加,短的会循环补足长度。 2.如果有一个长度为0,结果长度也为0。 如果把 c(1,2,3) 加到一个长度为 6 的 vector 上,那么就相当于加 c(1,2,3,1,2,3) 名字传递: first one wins 维度: 矩阵+矩阵,维度必须相同 矢量+矩阵,先 recycle,再检查维度 例如 > x [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > c(1,2)+x [,1] [,2] [,3] [1,] 2 6 8 [2,] 4 6 10 [3,] 4 8 10 警告信息: In c(1, 2) + x : 长的对象长度不是短的对象长度的整倍数 以上代码中,由循环法则, c(1,2) 变成了 c(1,2,1,2,1,2,1,2,1) NA: 统计中不存在的量 NaN: 除 0 产生的结果 zz了,明天继续 ... |
|
night_stalker
2010-09-30
rinruby 是在 ruby 中调用 R 解释器的接口。和 rsruby 相比,只有纯 ruby 的程序(通过检测机器上已经安装的 R,启动一个 Rterm 进行 eval),安装简单很多:
gem in rinruby 创建一个解释器实例 R = nil # 禁止默认的 session require 'rinruby' r = Rinruby.new false 操作 # 赋值 r.assign 'x', 12 # 运算 r.eval 'x <- c(3, 4, 5) + x' # 取值 r.pull 'x' 退出 r.quit 例如画个直方图 # coding: utf-8 require "rinruby" R.eval 'x<-rnorm(100)' R.eval 'hist(x, col="light blue")' # R.eval 'savePlot("t.png", type="png")' # 保存到文件 gets # hang on,等待结果 比起 rsruby,rinruby 的方式慢一些(需要和解释器之间进行 socket 通信),但是不依赖于特定的 R runtime。比起直接用 system 调用 R,要快一些而且可以进行交互。保持一个 R 的实例进行重复的操作可以减少很多初始化 R 运行时的开销。 |
|
Saito
2010-10-01
原来你R了..
那天我还准备给你说用R画一些图表什么的.. 后来压抑了内心的欲火.. |
|
RednaxelaFX
2010-10-01
你们是怎么踏入了R之领域的……契机是啥?
|
|
fireflyman
2010-10-01
R能做什么?
|
|
night_stalker
2010-10-01
统计和数值计算,做的和 matlab 差不多的事。
功能可能比 matlab 少点,但是语言很有爱 …… IDE 比 matlab 简单流畅 (matlab 太巨大,而且那个 java 写的界面慢死了……) ────────────────────────────────────── 其实是数学组有人 zz 了一篇孟岩的 "什么是矩阵" (让人很想喷一喷),然后在 reddit 看到推销 GNU Octave 的贴子,然后就 …… 开始看 R 了 …… |
|
lucane
2010-10-01
观摩高手
|