• R语言的最大数值

  在R语言里面,所能计算的最大数值可以用下面的方法获得:

  

###R可计算最大数值
.Machine

在编程的时候注意不要超过这个数值。当然,普通情况下也不可能超过的。

  • R语言的最大精度

  R语言的舍入误差要比python好不少,但是也还是有的。

  

###最小非零整数
2^-1074
###最大数
2^1023
###机器误差
2^-52 + 1 - 1
2^-53 + 1 - 1 ###比较两个数字
all.equal(2^-12 + 1,2^-13 + 1,tolerance = 1e-7)

  上面所谓的机器误差就是不可避免的最小误差,在做运算时会被舍弃。至于在什么情况下舍弃,取决于两个数之间的误差是均方根,系统默认的均方根是10^-8,小于这个值的时候R就会默认它们相等。使用all.equal函数可以自己设定均方根的阈值,即tolerance.

  • R语言的时间消耗
###创建向量会更浪费时间
n <- 1e6
x <- rep(0,n)
system.time(for(i in 1:n) x[i] <- i^2)
x <- c()
system.time(for(i in 1:n) x[i] <- i^2)

    可以看到时间差距还是很大的。

###矩阵的列求和
###全部使用循环,不使用sum函数
Bmatrix <- matrix(1:1e6,nrow = 1000)
colsums <- rep(NA, ncol(Bmatrix))
system.time(for(i in 1:ncol(Bmatrix)){
s <- 0
for(j in 1:1000){
s <- s + Bmatrix[j,i]
}
colsums[i] <- s
})
###使用apply和sum
system.time(colsums <- apply(Bmatrix,2,sum))
###使用sum和循环
system.time(for(i in 1:ncol(Bmatrix)){
colsums[i] <- sum(Bmatrix[,i])
})
###使用系统函数
system.time(colsums <- colSums(Bmatrix))

  上面的结果随着电脑的不同应该是不一样的,但是整体上来看肯定使用系统函数是最快的,其次是用sum函数,但是for和apply的效率是一样的,因为apply本来就是做的循环运算:

###apply里面的for结构/膜拜大佬的代码
ans <- vector("list", d2)
if (length(d.call) < 2L) {
if (length(dn.call))
dimnames(newX) <- c(dn.call, list(NULL))
for (i in 1L:d2) {
tmp <- forceAndCall(1, FUN, newX[, i], ...)
if (!is.null(tmp))
ans[[i]] <- tmp
}
}
else for (i in 1L:d2) {
tmp <- forceAndCall(1, FUN, array(newX[, i], d.call,
dn.call), ...)
if (!is.null(tmp))
ans[[i]] <- tmp
}

  

###colSums的函数结构
function (x, na.rm = FALSE, dims = 1L)
{
if (is.data.frame(x))
x <- as.matrix(x)
if (!is.array(x) || length(dn <- dim(x)) < 2L)
stop("'x' must be an array of at least two dimensions")
if (dims < 1L || dims > length(dn) - 1L)
stop("invalid 'dims'")
n <- prod(dn[id <- seq_len(dims)])
dn <- dn[-id]
z <- if (is.complex(x))
.Internal(colSums(Re(x), n, prod(dn), na.rm)) + (0+1i) *
.Internal(colSums(Im(x), n, prod(dn), na.rm))
else .Internal(colSums(x, n, prod(dn), na.rm))
if (length(dn) > 1L) {
dim(z) <- dn
dimnames(z) <- dimnames(x)[-id]
}
else names(z) <- dimnames(x)[[dims + 1L]]
z
}

  这个代码。。。里面还调用的colSums,有没有童鞋可以帮我解释一下这是为啥。

R语言的精度和时间效率比较(简单版)的更多相关文章

  1. R语言的帮助使用和图形功能简单介绍

    R语言的帮助使用和图形功能简单介绍 R语言帮助,在Windows桌面下,有很多种.最长使用的是在命令行下help() > help.start() 会在浏览器中,打开帮助的主页 watermar ...

  2. 2-8 R语言基础 日期与时间

    #日期 Date > x<-date()> class(x)[1] "character" > x2 <- Sys.Date()> class( ...

  3. R语言学习 第十一篇:日期和时间

    R语言的基础包中提供了三种基本类型用于处理日期和时间,Date用于处理日期,它不包括时间和时区信息:POSIXct/POSIXlt用于处理日期和时间,其中包括了日期.时间和时区信息.R内部在存储日期和 ...

  4. 数据分析和R语言的那点事儿_1

    最近遇到一些程序员同学向我了解R语言,有些更是想转行做数据分析,故开始学习R或者Python之类的语言.在有其他编程语言的背景下,学习R的语法的确是一件十分简单的事.霸特,如果以为仅仅是这样的话那就图 ...

  5. R语言的前世今生(转)

    最近因病休养在家,另外也算是正式的离开Snack Studio.终于有了大把可以自由支配的时间.可以自主的安排.最近闲暇的时间总算是恶补了不少前段时间行业没有时间关注的新事物.看着行业里引领潮流的东西 ...

  6. 数据攻略●R语言自述

    (注明:以下文章均在Linux操作系统下执行) 一.R语言简介 R语言是用于统计分析,图形表示和报告的编程语言和软件环境.R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大 ...

  7. Mac下R语言环境搭建

    Mac下R语言环境搭建 博主在数据分析的时候一直用的python(MATLAB太重了),最近跟其他搞学术的人合作,需要用一下R语言,所以也打算顺便学习一下R. R语言简介 R语言是用于统计分析,图形表 ...

  8. 手把手教你学习R语言

    本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者不知道从哪开始,如何进行,选择什么学习资源.虽然网络上有许多不错的免费学习资源,然而它们多过了头,反 ...

  9. 【转】R语言知识体系概览

    摘要:R语言的知识体系并非语法这么简单,如果都不了R的全貌,何谈学好R语言呢.本文将展示介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言. 最近遇到很多的程序员都想转行到数据分析,于是就开 ...

随机推荐

  1. MySql 查询表结构信息

    select Column_name as 列名,is_nullable as 是否可为空,data_type as 数据类型,column_default as 默认值,case when colu ...

  2. git checkout --ours 【学习笔记】

    用新分支:git checkout --theirs 文件用master分支:git checkout --ours 文件 执行之后git add

  3. UI组件--element-ui--Upload多组件自定义上传

    需求: 提交详细信息的表单, 并上传对应图片(如下图), 后台接口要求表单数据和图片需要一次上传完成.. 分析: 实际上, 每个element-ui Upload组件都应发送一次请求, 很明显不符合我 ...

  4. python学习记录-机器学习

    首先安装了anaconda3软件,安装的是最新版,安装时勾选了写入环境变量,支持的是python3.7.3版本. 然后设置了清华大学的镜像,主要是用管理员身份运行 anaconda prompt命令行 ...

  5. HTTP请求头和响应头部包括的信息有哪些?(转)

    转载自:https://www.cnblogs.com/hxc555/p/6506154.html 每个HTTP请求和响应都会带有相应的头部信息.默认情况下,在发送XHR请求的同时,还会发送下列头部信 ...

  6. Hadoop2.X管理与开发

    Hadoop 2.X 管理与开发 一.Hadoop的起源与背景知识 (一)什么是大数据 大数据(Big Data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式 ...

  7. (简单)华为P9plus VIE-AL00的usb调试模式在哪里开启的经验

    每次我们使用pc接通安卓手机的时候,如果手机没有开启Usb调试模式,pc则没能成功检测到我们的手机,有时,我们使用的一些功能比较强的的app比如之前我们使用的一个app引号精灵,老版本就需要打开Usb ...

  8. 树中的路径和 Sum of Distances in Tree

    2019-03-28 15:25:43 问题描述: 问题求解: 写过的最好的Hard题之一. 初看本题,很经典的路径和嘛,dfs一遍肯定可以得到某个节点到其他所有节点的距离和.这种算法的时间复杂度是O ...

  9. Data Block Compression

    The database can use table compression to eliminate duplicate values in a data block. This section d ...

  10. Lab 10-1

    This lab includes both a driver and an executable. You can run the executable from anywhere, but in ...