首页 > 代码库 > r函数知识总结

r函数知识总结

1. rbind(), cbind():  构造、合并vector 或matrix为一个矩阵:cbind(1, 1:10) ----默认列合并, rbind(1, 1:10) ----行合并(or构造)

2. R语言中关于矩阵,向量的一些运算

① 矩阵相乘使用“%*%”,而不是"*", 矩阵与向量,向量与向量相乘最好也是如此;

② 创建一个n*1维的向量,并添加到矩阵中,使用 x0 <- matrix(0, nrow=n, ncol=1), x <- cbind(x0, x); 使用matrix和cbind函数;

③ nrow, ncol函数的参数不能是向量,可以是矩阵、数组、数据框,如y <- c(1,2,3), n <- nrow(y),这样得到的n是NULL,而不是理想的3. 可使用n <- length(y)来求;dim(y)[1]也不可以;

④ 矩阵or向量的转置函数:t(v),其中v可以是向量or矩阵;

⑤ 提示“错误于..., 非整合陈列/参数”, 说明矩阵相乘行列不匹配,可能是运算符用错;

⑥当list,data.frame等类型中元素是数据类型时,看通过as.matrix(x)来做转化成矩阵形式,此时要注意:x[i, ]某一个行的值,是向量形式,即is.vector(x[i, ]) --- TRUE; is.matrix(x[i, ]) --- FALSE; 那么给参数赋值时,要注意,不要使用t(), 如 w <- w + y[i] * t(x[i, ]) (错误), 应改写为 w <- w + y[i] * x[i, ]

3. RTools(R语言编译工具)安装与配置

① 根据R语言版本下载对应的RTools版本,RTools下载地址:http://cran.r-project.org/bin/windows/Rtools/

② 配置环境设置:本人的RTools安装在D:\InstalledProgramingSoftware\Rtools中,这里需要把RTools的bin目录和gcc-4.6.3对应的bin目录设置环境变量。右键-》我的电脑-》高级-》环境变量-》系统变量下面的Path双击-》在值的后面打个分号,D:\InstalledProgramingSoftware\Rtools\bin; D:\InstalledProgramingSoftware\Rtools\gcc-4.6.3\bin(注意:一定要保证在PATH中顺序在D:\cygwin\bin前面)

4. RMySQL 64win7安装过程

① 下载安装与R对应版本的RTools,安装并配置(具体见2);

② 在R的安装目录\R-2.5.3\etc\目录下,创建 Renviron.site文件,并在里面添加MYSQL_HOME=MySQL

的安装路径(我的是:MYSQL_HOME=D:/InstalledProgramingSoftware/MySQL/MySQL Server 5.5, 注意改成反斜杠);

③ 将MySQL安装目录/lib下的libmysql.lib文件拷贝到 mysql/lib/opt 文件夹下,没有opt的,建一个文件夹,同时也将libmysql.dll文件copy到R-2.15.3/bin下面

④ 在R中执行:install.packages("RMySQL", type="source"),最终看到DONE的提示,说明安装成功,可使用Sys.getenv(MYSQL_HOME)验证路径是否正确,使用library(RMySQL)验证是否安装成功。

本人机器(64 win7)上安装后,提示没有安装成功,看了下过程是编译error,经过查找之后,发现之前安装过cygwin,并即将其路径配置到系统变量PATH中,虽然安装RTools时,也将gcc-4.6.3/bin配置到PATH路径上了,但是是放在cygwin后面的,机器总是按照顺序在路径上找,所以首先找到了cygwin,用它来编译源文件包,所以出错了,Solution:将gcc-4.6.3/bin 放置在cygwin前面,这样在执行④,就OK了~

5. R语言 函数问题

① R函数的返回值可以是任何对象,或复杂的对象。IF函数有多个返回值,可以把它存储在一个列表或其它容器变量中,返回。 例如,线性回归学习算法(梯度下降)要返回损失函数J和参数theta, mylist <- list(J, theta), return(mylist); 其中mylist[[1]] ----> J;

② 函数都是对象,因此

(1). 函数可以作为其他函数的参数,例如 

f1 <- function(x) return(a+b); 

f2 <- function(x) return(a-b); 

g <- function(h, a, b);  

g(f1, 3, 2) g=5; 

g(f2,3,2) g=1; 

(2). 因为函数是对象,所有可以在函数所组成的列表上做循环,比如在一幅图上绘制若干个函数的图形,举例:

g1 <- function(x) return(sin(x))

g2 <- function(x) return(sqrt(x^2 + 1))

g3 <- function(x) return(2*x - 1)

plot(c(0,1), c(-1, 1.5))

for (f in c(g1, g2, g3)) plot(f, 0, 1, add=T)

③ 通过赋值来改变函数的主体, 举例:

g <- function(h,a,b) h(a,b)

body(g) <- quote(2*x + 3)

④⑤

6. R语言编程:逻辑元素问题

 

(1). R中,如果提示"错误于if(...) {: 需要TRUE/FALSE的地方不可以用缺少值", 

解释错误:if(condition),其中condition处只能是TRUE/FALSE,不能是其它值,由于参与逻辑运算符的变量,存在缺失值NA,导致了condition出现了NA,才会提示错误;

出现错误的可能:① 参与计算的数据存在缺失值;② 参与运算的向量/矩阵/数组, 下标出界;

解决方案:详细检查数据是否存在缺失值,进行弥补,可能是由于导数导入的问题;插入必要的print语句,检查下标出界问题;

(2) 当理所当然的认为 矩阵 %*% 矩阵相乘时,可能会提示以下错误:错误于x %*% ww : 需要数值/复数矩阵/矢量参数. 这是因为运算数的数据类型可能不是矩阵(徒有其表),可能是list,dataframe等形式,此时需要做类型转换(当运算数的每个元素数据类型相同时),如 x <- as.matrix(x),当然也有可能是行列出了问题;

7. 随机抽样函数

 

(1). R中,将数据集中record/example的原本顺序打乱,如何实现?sample()

在数据处理or验证数据中record顺序对算法的影响时,需要将使用随机数生成函数,将原本数据打乱,R中可使用example()函数:

x <- 1:10

sample(x) --- > 8 3 2 6 9 10 4 5 1 7 (生成x内的数的乱序)

sample(c(0,1), 100, replace=TRUE) ---> 生成100个0和1的数(伯努利抽样)

sample(x, size, replace = FALSE, prob = NULL)   # x为含1个or多个元素的容器,size表示从x中随机抽取数,replace表示是否放回(可重复)

sample.int(n, size =n, replace = FALSE, prob = NULL);  n表示可以抽取的是1:n中的数,size表示抽取的个数,replace表示是否放回;

详细请 ?sample

(2). 当然runif(), rnorm()可以用作浮点数/正态分布数据的随机生成,当然还有好多满足某种概率分布生成数的函数....

8. 排列组合

(1). pregmisc包,permutations(n= , r = ) # 排列函数,列出A(n,r)中所有排列; combinations(n= , r= ) #组合函数,列出C(n,r)中所有组合;

(2). choose(n,r) # 计算组合数,如choose(6,3) ---> 20; factorial(n) # 计算阶乘,n! = n*(n-1)*....*1; 二者组合可计算排列数C(n,r) = n! / r! ;

(3). 

r函数知识总结