r语言如何读取matlab数据类型,[转载]R语言数据类型解析[转]

寻求帮助,使用 help(solve),?solve 和 help(“solve”)是一样的,如果需要搜索可以用

help.search(solve) 或者 ??solve。另外使用 help.start() 可以打开网页版的帮助,这个功能倒是和

Matlab 的 doc 有几分相似。

使用 source() 和 sink() 命令可以将 R 的输入输出重新定向,比如从一个文件中读入命令就是 source(

“my-file.R”),而将输出导入到文件则是 sink( “output.result” )。

对于一个 workspace 里面的数据,可以用 objects() 或者 ls() 列出,rm(x, y, z)

删掉某些变量,值得注意的是这里直接写变量名,都没有引号,这是和 R 语言的规范有关系的(与 lisp 挺像的)。结束一个

session 的时候可以将 workspace 的内容存储在工作目录下,作为 .RData 文件,下次在该目录使用 R 打开新的 R

对话时会自动的读入。存储 workspace 可以用 save.image(),或者更加细致的 save() 命令。

R 的赋值使用 ->、

content ) 形式。主要的数据类形式 vector、objects、factor、array、matrix、list 和

data frame。vector 这个和一般的 Matlab 数组类似,但是和 Matlab

的运算不同的是,它不需要参与运算的两者长度一样,不同长度的元素会按照最长的那一个重复。

常用生成 vector 的函数有 seq() 类似 matlab 的 linspace 或者 1:2:10

这种类型的等差数列,rep() 是类似 repmat 的作用,但是可以将整体重复或者将每个元素重复。和 Matlab 类似,R 也拥有

logical vector(支持 !、& 等逻辑操作),vector 里面的 NA 表示

missing value。判断 NA 使用 is.na(),这个与 Matlab 的 is 系列函数类似。注意 is.na(x) 与

x == NA 的结果是不同的。另外有一些计算会产生 NaN,这和 NA 有一定的不同,但是 is.na() 对两者不加区分,而

is.nan() 可以区分两者。

R 的字符串 vector 和 matlab 类似,都是用现成的结构(R 使用 vector)存放的,R

支持单引号或者双引号,也支持 C 语言中的转意字符,如 n、t 等。

如果需要取一个 vector 的一部分出来,与 Matlab 类似可以用 logical vector,或者一个整数

vector,但是和 matlab 不同的是,索引使用 [],而不是 (),另外允许对返回值使用索引,比如 (1:10)[seq(1,

10, by=2)] 是允许的。另外如果 index 出现负数,表示除掉这些绝对值后的 index 剩下的 index。与

Matlab 类似,索引的 vector 可以作为左值。不同的是 R 的 vector 有 names

属性,这意味着每个元素还可以通过字符串来进行索引(需要用 names(myvector)

赋值)。

R 里面的原子结构(atomic structure)是 logical、numeric、complex、character 和

raw,其他的 objects 都是这些 atom 的组合,我们也把原子的种类称为 mode,比如 vector 是相同的 atom

组成的;而 list 就是为了形成各种结构的嵌套结构,所以每个元素可以是不同的 mode。我们可以用 mode(obj)

获得一个对象的 mode,另外一个属性是 length()。一般来说,我们可以通过 attributes()

获得一个对象的属性。结构的互相转换,常使用 as.*() 函数,如 as.character()、as.integer()。

值得注意的是,访问某个对象的属性和修改该属性都使用同一个函数,只是后者加上赋值,如 length(x)

objective, “property”) 获得某个对象的属性。每个对象有自己的 class,这可以用 class() 获得,使用

unclass() 可以暂时消除起 class 信息。

所谓的 factor 就是所谓的 categorical variable,这分为 ordered 以及

unordered,如创建一个 string vector,通过 factor 构造出一个 unordered

factor,我们可以用 levels 获得其标签,如果我们用 class 查看会发现这是 factor,但是用 mode 看却是

numeric。一个 factor 和一个 vector 的组合常被称为 ragged

array,因为每个子类的长度不一定相同。我们常用 taaply( vector, factor, fun)

来对每个子类的数据进行计算。ordered factor 使用 ordered() 创建,两者大致看来只是后者会依照 factor

排序,但是在 regression 里面两者是区别对待的。

matrix 和 array 都是含有 dim 属性的 vector,因此建立一个 vector,然后对其 dim

属性赋值就变成 matrix 或者 array,matrix 是两维的,更高维的就是 array,如

x

c(3, 8) 这产生的是 3×8 的 matrix,我们可以通过 class 看见,其 mode

仍然是 numeric。对 array 的索引和 Matlab 一样,可以用 [ , ] 的形式,只是用空参数表示全部的(Matlab

是 :),另外 R 支持用 array 来作索引,如 3×4 的 matrix 可以用 nx2 的 matrix 取其中 n

个元素,每行是一个索引位置。可见 R 里面的 matrix 或者 array 的数据储存并没有改变,只是通过 dim

属性给它添加了额外的索引方式。可以用 array() 和 matrix() 更方便的创建我们需要的矩阵、数组。如我们需要产生一个 N

个样本 c 类的 assignment matrix,A

; 其中 cbind() 将两个 matrix 依照列拼接,类似的还有 rbind(这分别相当于 Matlab 里面的 [ ; ] 与

[ , ])。当 vector 和 marix/array 混合在一起进行计算的时候,短的 vector 补长,必须拥有相同的

dim。将 matrix/array 转换成为 vector 只需要 as.vector() 或者直接用 c() 即可。

常用的矩阵操作有元素对元素的加法、减法和乘法,直接使用 + – * 即可,另外有矩阵乘法用 %*%(vector

作矩阵乘法的时候会产生较小的矩阵,比如两个 vector 相乘,产生的是标量而不是一个矩阵),外积(其实是 Kronecker

乘积)%o% 或者 outer()。不过 outer() 是更广义的函数,除了可以做 %o%

运算,还可以将任意函数作用在类似的结构上。矩阵的转置使用 aperm,这个操作实际上是把 array 的维数互换,因此 aperm(

X, c(2 1)) 等价于转置了,更简洁的是使用 t(X)。crossprod(X, y) 等价于 X’y,而diag() 和

Matlab 中函数类似。求解线性系统可以用 solve(A, b),如果写 solve(A) 返回的是 A 的逆。使用

eigen() 可以求出特征值,这返回的的一个是 $value,一个是 $vectors,这种结构将在后面介绍。奇异值使用

svd(),它返回 $d $u $v 三个部分。lsfit() 可以计算最小二乘拟合。qr() 计算对应的 QR 分解。

为了统计一些频率,比如 contingency table,都会使用 table() 函数,比如对 factor

的统计,如果是实值的可以用 cut() 函数将其值离散化为 ordered factor,如果有多个 因素,则对应的

contingency table 也是用 table( factor1, factor2 ) 获得的。

前面我们看见了 $ 这种写法,这就是 list,这一般使用 list() 创建,list 的元素可以有用来索引的

key,这可以用 listvar$key 获得其内容,也可以使用 listvar[[ "key" ]]获得,通过 [[i]]

这样可以遍历所有 key,注意 [i] 将和 Matlab 对 cell array 使用 (i) 类似,获得的不是第 i

个位置的内容,而是对应位置上的 list。对 list 使用 attributes() 将会返回 names,这是这个 list

所有的 key 组成的 key,如果没有 key,对应的是一个空字符串。这也是 R 默认返回多个返回值的方法。

所谓的 data.frame 也是一种 list,但是要求每个子 list 里面都是长度一样的 vector,其实

data.frame 是处理数据最佳的方式,相当于每一列都是一个特征的数据矩阵。通常我们可以用 data.frame()

函数产生,这其实和 list() 函数完全一样。为了处理某个 data.frame 方便,可以用 attach()/detach()

进入到某个 data.frame 的 scope 里,这时就可以免去前面 data$ 的修饰符了,对一般的 list

也可以使用类似的方式。我们要对 R 寻找变量的方式熟悉的话就知道,使用 search() 返回的是搜索变量和函数的 scope,一般

R 的基本函数在 package:base 里面,全局变量在 .GlobalEnv 里面,attach() 的 list

也会添加到这个 vector 里面。最常见读入外部数据的函数是 read.table(),这也是创建 data.frame

的最方便的方式,另外还有一个 scan()。R 自己也带了很多数据供做实验,可以用 data( dataset )

读入,还可以用某个特定的 package 读入数据。对这种数据一般都可以在一个 spreadsheet 里面编辑,这只需要

edit() 那个 data.frame 就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中函数过载,Java继承中成员方法的overload(重载/过载)

如果Java基础类有一个方法名被“过载”使用多次,在衍生类里对那个方法名的重新定义就不会隐藏任何基础类的版本。所以无论方法在这一级还是在一个基础类中定义,过载都会生效。public class Hide {public static void main(String[] args) {Bart b new B…

matlab 发送 126 邮件,python实现126邮箱发送邮件

用Python发送126邮件,供大家参考,具体内容如下今天想做个自动化邮件提醒的功能,最近刚好在学习python,都说python那么强大,想试一下python能否搞定,搜一下资料,果真可以,而且又简单通…

C++ auto和decltype关键字

可以用 auto 关键字定义变量,编译器会自动判断变量的类型。例如: auto i 100; // i 是 int auto p new A(); // p 是 A* auto k 34343LL; // k 是 long long有时,变量的类型名特别长,使用 auto 就会很方便。例如&#xff1a…

理查森外推法 matlab,数值代数–理查森外推法.doc

数值代数–理查森外推法实验四一、实验名称理查森外推算法二、实验目的与要求:实验目的:掌握理查森外推算法。实验要求:1. 给出理查森外推算法思路,2. 用C语言实现算法,运行环境为Microsoft Visual C。三、算法思路&am…

python 自动化出报表,python实现报表自动化详解

本篇文章将介绍:xlwt 常用功能xlrd 常用功能xlutils 常用功能xlwt写Excel时公式的应用xlwt写入特定目录(路径设置)xlwt Python语言中,写入Excel文件的扩展工具。可以实现指定表单、指定单元格的写入。支持excel03版到excel2013版。使用时请确保已经安装p…

C++ 右值引用

能出现在赋值号左边的表达式称为“左值”,不能出现在赋值号左边的表达式称为“右值”。一般来说,左值是可以取地址的,右值则不可以。 非 const 的变量都是左值。函数调用的返回值若不是引用,则该函数调用就是右值。之前我们了解的…

Sublime Text 3 详细安装教程

Sublime Text 3 详细安装 下载 官网下载地址https://www.sublimetext.com/3 安装 1 . 下载完成之后安装程序自动运行,默认安装路径,不要修改(如果修改安装路径后期需要配置环境变量) 注意:最好使用默认填入的安装…

matlab rgb2hsv v=1,为什么我在matlab中使用rgb2hsv时一直显示这个函数不存在呢?那源函数在哪下载?...

匿名用户1级2014-04-15 回答specfun工具箱没装可能给你个rgb2hsv源代码 复制下来同名保存就能用了function [h,s,v] rgb2hsv(r,g,b)switch nargincase 1,if isa(r, uint8),r double(r) / 255;elseif isa(r, uint16)r double(r) / 65535;endcase 3,if isa(r, uint8),r doubl…

php游戏怎么设置fms,[FMS]FMS使用需要注意的几种问题总结说明

[FMS]FMS使用需要注意的几种问题总结说明:* 中文编码:有些时候我们用flash去读取外部的php,asp.....文件里的中文显示在flash里会出现乱码的情况,为了解决在flash里显示中文很多教程里通常都直接加了一句System.useCodepagetrue问…

STL算法

STL 提供能在各种容器中通用的算法,如插入、删除、查找、排序等。算法就是函数模板。算法通过迭代器来操纵容器中的元素。 许多算法操作的是容器上的一个区间(也可以是整个容器),因此需要两个参数,一个是区间起点元素…

oracle导出pck文件,Oracle sqlloader自动化导入迁移工具—可批量生成千万控制文件与批处理文件|一键执行(推荐)...

应用介绍一、设计概述与背景:在目前SQL Server数据库和Oracle数据库之间进行数据迁移工作,可以使用多种方案,其中采用文本文件作为数据交换的中间介质,具有如下特点:1、各个主流数据库都支持文本文件的导入、导出功能。…

STL中“大”、“小”和“相等”的概念

STL 中关联容器内部的元素是排序的。STL 中的许多算法也涉及排序、查找。这些容器和算法都需要对元素进行比较&#xff0c;有的比较是否相等&#xff0c;有的比较元素大小。 在 STL 中&#xff0c;默认情况下&#xff0c;比较大小是通过<运算符进行的&#xff0c;和>运算…

oracle 分割字符成数组,oracle依据分隔符将字符串分割成数组函数

oracle根据分隔符将字符串分割成数组函数--创建表类型create or replace type mytype as table of number;--如果定义成varchar--CREATE OR REPLACE type mytype as table of varchar2(4000);-- 将字符串分割成数组function my_split(piv_str in varchar2, piv_delimiter in va…

C++ vector,STL vector

vector 是顺序容器的一种。vector 是可变长的动态数组&#xff0c;支持随机访问迭代器&#xff0c;所有 STL 算法都能对 vector 进行操作。要使用 vector&#xff0c;需要包含头文件 vector。 在 vector 容器中&#xff0c;根据下标随机访问某个元素的时间是常数&#xff0c;在…

sql查询oracle数据,sql-server – 从SQL Server查询Oracle数据库

我有一个Oracle 11g XE数据库,我想将其转移到SQL Server Express 2005中.起初我以为我只是在Oracle中生成表作为SQL,操纵数据格式,并在SQL Server中运行查询.这适用于小型表,但我有几个表有几十万行,有些表有数百万行,所以这个解决方案不起作用.然后我创建了一个包含以下内容的…

C++ list,STL list

list 是顺序容器的一种。list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素&#xff0c;也有一个指针指向前一个元素。 在 list 容器中&#xff0c;在已经定位到要增删元素的位置的情况下&#xff0c;增删元素能在常数时间…

Oracle010316,安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges

运行环境&#xff1a;在自己笔记本电脑上安装测试操作系统版本&#xff1a;64位win8.1oracle版本&#xff1a;64位 oracle 11g安装oracle 成功后//以管理员身份登录oracle在cmd里输入命令 sqlplus / as sysdba然后 报错 ERROR: ORA-01031 insufficient privileges解决办法&…

C++ 双向队列

deque 也是顺序容器的一种&#xff0c;同时也是一个可变长数组。要使用 deque&#xff0c;需要包含头文件 deque。所有适用于 vector 的操作都适用于 deque。 deque 和 vector 有很多类似的地方。在 deque 中&#xff0c;随机存取任何元素都能在常数时间内完成。它相比于 vect…

C++ 函数对象

如果一个类将()运算符重载为成员函数&#xff0c;这个类就称为函数对象类&#xff0c;这个类的对象就是函数对象。函数对象是一个对象&#xff0c;但是使用的形式看起来像函数调用&#xff0c;实际上也执行了函数调用&#xff0c;因而得名。 函数对象的例子。 #include <i…

sencha app watch php,我的第一个基于SenchaTouch的WebApp

经过进一周的各种折腾&#xff0c;各种想放弃&#xff0c;各种纠结&#xff0c;最终还是顺利的完成了SenchaTouch的开发&#xff0c;回想起来感觉“甜甜的”&#xff0c;也充分体会到Sencha MVC开发模式的好处&#xff0c;以及SenchaTouch.js和Extjs的强大和牛逼&#xff0c;不…