01 R语言基础(1) Read.delim

Python010

01 R语言基础(1) Read.delim,第1张

R Read.delim Example

read.delim() function reads a file into list. The file by default is separated by tab, it can be comma delimited or any other delimiter specified by parameter "sep=". If the parameter "header=" is "TRUE", then the first row will be treated as the row names. 

read.delim(file, header = FALSE,sep = "\t",quote = "\"",          dec = ".", fill = TRUE, comment.char = "", ...)

read.delim2(file, header = TRUE,sep = "\t",quote = "\"",          dec = ",", fill = TRUE, comment.char = "", ...)

• file: file name

• header: 1st line as header or not, logical

• sep: field separator

• quote: quoting characters

... 

read.delim() is almost the same as read.table(), except the field separator is tab by default. It is convenient for open tab delimited file. 

----------------------------------------------------------------------------------------------------------

数read.table是读取矩形格子状数据最为便利的方式。因为实际可能遇到的情况比较多,所以预设了一些函数。这些函数调用了read.table但改变了它的一些默认参数

注意,read.table不是一种有效地读大数值矩阵的方法:见下面的scan函数。

一些需要考虑到问题是:

编码问题

如果文件中包含非-ASCII字符字段,要确保以正确的编码方式读取。这是在UTF-8的本地系统里面读取Latin-1文件的一个主要问题。此时,可以如下处理

read.table(file("file.dat", encoding="latin1"))

注意,这在任何可以呈现Latin-1名字的本地系统里面运行。

首行问题

我们建议你明确地设定header参数。按照惯例,首行只有对应列的字段而没有行标签对应的字段。因此,它会比余下的行少一个字段。(如果需要在 R 里面看到这一行,设置header = TRUE。)如果要读取的文件里面有行标签的头字段(可能是空的),以下面的方式读取

read.table("file.dat", header = TRUE, row.names = 1)

列名字可以通过col.names显式地设定;显式设定的名字会替换首行里面的列名字(如果存在的话)。

分隔符问题

通常,打开文件看一下就可以确定文件所使用的字段分隔符,但对于空白分割的文件,可以选择默认的sep = ""(它能使用任何空白符作为分隔符,比如空格,制表符,换行符),sep = " "或者sep = "t"。注意,分隔符的选择会影响输入的被引用的字符串。

如果你有含有空字段的制表符分割的文件,一定要使用sep = "t"。

引用 默认情况下,字符串可以被"或'括起,并且两种情况下,引号内部的字符都作为字符串的一部分。有效的引用字符(可能没有)的设置由参数quote控制。对于sep = "n",默认值改为quote = ""。

如果没有设定分隔字符,在被引号括起的字符串里面,引号需要用 C格式的逃逸方式逃逸,即在引号前面直接加反斜杠。

如果设定了分隔符,在被引号括起的字符串里面,按照电子表格的习惯,把引号重复两次以达到逃逸的效果。例如

'One string isn''t two',"one more"

可以被下面的命令读取

read.table("testfile", sep = ",")

这在默认分隔符的文件里面不起作用。

缺损值 默认情况下,文件是假定用NA表示缺损值,但是,这可以通过参数na.strings改变。参数na.strings是一个可以包括一个或多个缺损值得字符描述方式的向量。

数值列的空字段也被看作是缺损值。

在数值列,值NaN,Inf和-Inf都可以被接受的。

尾部空字段省略的行

从一个电子表格中导出的文件通常会把拖尾的空字段(包括?堑姆指舴? 忽略掉。为了读取这样的文件,必须设置参数fill = TRUE。

字符字段中的空白

如果设定了分隔符,字符字段起始和收尾处的空白会作为字段一部分看待的。为了去掉这些空白,可以使用参数strip.white = TRUE。

空白行

默认情况下,read.table忽略空白行。这可以通过设置blank.lines.skip = FALSE来改变。但这个参数只有在和fill = TRUE共同使用时才有效。这时,可能是用空白行表明规则数据中的缺损样本。

变量的类型

除非你采取特别的行动,read.table将会为数据框的每个变量选择一个合适的类型。如果字段没有缺损以及不能直接转换,它会按logical,integer,numeric和complex的顺序依次判断字段类型。如果所有这些类型都失败了,变量会转变成因子。

参数colClasses和as.is提供了很大的控制权。as.is会抑制字符向量转换成因子(仅仅这个功能)。colClasses运行为输入中的每个列设置需要的类型。

注意,colClasses和as.is对 每 列专用,而不是 每 个变量。因此,它对行标签列也同样适用(如果有的话)。

注释

默认情况下,read.table用#作为注释标识字符。如果碰到该字符(除了在被引用的字符串内),该行中随后的内容将会被忽略。只含有空白和注释的行被当作空白行。

如果确认数据文件中没有注释内容,用comment.char = ""会比较安全 (也可能让速度比较快)。

逃逸

许多操作系统有在文本文件中用反斜杠作为逃逸标识字符的习惯,但是Windows系统是个例外(在路径名中使用反斜杠)。在 R 里面,用户可以自行设定这种习惯是否用于数据文件。

read.table和scan都有一个逻辑参数allowEscapes。从 R 2.2.0 开始,该参数默认为否,而且反斜杠是唯一被解释为逃逸引用符的字符(在前面描述的环境中)。如果该参数设为是,以C形式的逃逸规则解释,也就是控制符如a, b, f, n, r, t, v,八进制和十六进制如40和x2A一样描述。任何其它逃逸字符都看着是自己,包括反斜杠。

常用函数read.csv和read.delim为read.table设定参数以符合英语语系本地系统中电子表格导出的CSV和制表符分割的文件。这两个函数对应的变种read.csv2和read.delim2是针对在逗号作为小数点的国家使用时设计的。

如果read.table的可选项设置不正确,错误信息通常以下面的形式显示

Error in scan(file = file, what  what, sep = sep 

或者

Error in read.table("files.dat", header = TRUE) : more columns than column names

这些信息可能足以找到问题所在,但是辅助函数count.fields可以进一步的深入研究问题所在。

读大的数据格子(data grid)时,效率最重要。设定comment.char = "",以原子向量类型(逻辑型,整型,数值型,复数型,字符型或原味型)设置每列的colClasses,给定需要读入的行数nrows(适当地高估一点比不设置这个参数好)等措施会提高效率。

作业

读取文件用得比较多的参数有:

“header”,“sep”,“quote”,“na.strings”,“fill”,“strip.white ”,“blank.lines.skip”,“comment.char ”,“”等等。

read.csv里的参数不多,如运行以下命令时,读取文件用得比较多的参数有,“header”,“ sep ”,“ quote”,“dec”,“fill ”,“comment.char ”。

在RStudio中从文件夹“file”的子目录“New file”里打开R markdown:

了解markdown一些选项和图标的功能:

如图中的解释:

R语言中的pheatmap包是制作热图的一个工具,在基因表达中,根据得来的实验数据,在使用pheatmap制作的基因表达或其它测试结果的热图中,如可以用不同颜色展示基因的表达量的差异。

注:引用网上的数据( https://blog.csdn.net/sinat_38163598/article/details/72770404 )练习,刚接触,需要花一些时间去了解

补充:

1.今天涉及到一些快捷键的使用

输入简单的向量,paste和paste0输入方式是一样的,如:

输入多个向量,paste需要在每个向量间用sep = " ",分开。

r语言操作符,这里对和错是怎么判断的,0.9==1.1-0.2为什么不对

精度问题,看all.equal,带参数tolerance那个,你以为等于0.9。其实不是,在r语言中,1.1-0.2得到值可以说是无限逼近0.9 的,与0.9 相差1.233581e-16。而 “==”是严格相等的,故而FALSE。

汇编语言中CJNE语句是怎么判断的?

CJNE A,#0,l1 ;

该指令执行的操作是,首先用(A)- 0 结果不保存但影响进位C,只判断结果是否为零以确定转移与否。

另外:“单片机语言中全是无符号数”的说法是不对的,有很多数就是有符号的,视具体情况而定。

请问老师这里的不等式是怎么判断的呢??为什么成立

|sinx|≤|x|

这是一个经常应用的不等式

腹式呼吸做得对不对是怎么判断的?

斐仲彼高腹式呼吸训练器,按照它的语音和指示灯提示操作的,这样可以保证我做的是正确的腹式呼吸

C语言IF逻辑关系机器是怎么判断的!

if/else if/else的配对原则是就近配对

我给你都加上括号,你再看看

程序一:

#include<stdio.h>

#include<math.h>

main ()

{

int a,b,c,s

scanf("%d%d%d",&a,&b,&c)

if(a<b) *1

{

if(b<c) *2

printf("max=%d",c)

else 与*2配对

printf("max=%d",b)

}

else if(a<c) 与*1配对

printf("max=%d",c)

else 与*1配对

printf("max=%d",a)

return 0

}

程序二:

#include<stdio.h>

#include<math.h>

main ()

{

int a,b,c,s

scanf("%d%d%d",&a,&b,&c)

if(a>b) *1

{

if(b>c) *2

printf("max=%d"a)

else 与*2配对

printf("max=%d"b)

}

else if(a>c) 与*1配对

printf("max=%d"a)

else 与*1配对

printf("max=%d"c)

return 0

}

C语言作业,判断素数的程序,为什么不对呢?

符号用错了 不等于是!= 而不是==!

修改如下

#include <stdio.h>int main(){ int aint Panbie (int x)printf("请输入一个整数:")scanf("%d",&a)Panbie(a)return 0}int Panbie (int x){ if (x==2||x==3||x==5||x==7) printf("\n该数是素数:%d", x)else if (x%2!=0&&x%3!=0&&x%5!=0&&x%7!=0)printf("\n该数是素数:%d", x)else printf("\n该数不是素数:%d",x)return 0}

另外 程序中 只对2 3 5 7做了判断

对于120以下的数  这个是正确的

如果大于120 比如输入121

这个就会输出素数的结果。

JAVA if else中判断的值为什么不能这样判断

语法不支持这种写法,所以报错咯。

y<0 &&y>-5 这样就可以了。

生物:法医为什么这样操作?他判断的依据是什么

法医在看一个人是被淹死的还是死后再扔进水里的也是看肺里有没有水,有水说明是死前吸进的,人死了就没有呼吸了钥匙是死后扔进去的就不会再肺里有水了~~

但是婴儿又不同了,出生前婴儿在妈妈肚子里是没有空气进行呼吸的,所以肺部是充满水的,等出生了就开始用肺呼吸了就和我们成年人一样肺里有空气了,所以看到肺里没水说明是出生前死亡的

判断题--为什么不对?

有明文规定:在狭窄坡路或冰雪路上会车时,下坡车让上坡车先行;下坡车已行至中途而上坡车未上坡时,上坡车让下坡车先行。

python对xml元素中的这个值,是怎么判断的

试试这样

>>>a="""

<a></a>

<b>

</b>

"""

>>>print [a]

['\n<a></a>\n<b>\n</b>\n']

>>>print [' \n'.strip()]

['']

>>>