从零开始进行单倍型分析
(一)基础知识篇
(二)分析工具篇
(三)R语言基础篇之入门(上)(只讲需要的)
(四)R语言基础篇之进阶篇(下)(只讲需要的)
(五)geneHapR之数据准备篇(上)(只讲需要的)
(六)数据准备及软件实操篇
(七)结果诠释篇
摘要:本文主要介绍了 R 语言中变量的保存与导入、表格的导入与输出以及图片的保存相关内容。图片保存分为基础图形系统和 ggplot2 包下的情况,基础图形系统可使用pdf()、png()等函数保存为不同格式的图片,并能调整参数;ggplot2 包中可使用ggsave()函数保存图片;另外,还介绍了eoffice的简单使用。最后,本文介绍了如何获取查看R对象存储的全部或部分属性信息。
一、R语言IO/输入输出/导入导出
变量的保存与导入
变量的保存
- 使用
save()
函数- 基本用法:
save()
函数可以将一个或多个 R 对象保存到指定的文件中。例如,如果你有变量x
、y
和z
,可以使用save(x, y, z, file = "myData.RData")
将这些变量保存到名为myData.RData
的文件中。 - 保存工作空间:可以直接使用
save.image()
来保存当前工作空间中的所有变量,它等同于save(list = ls(all.names = TRUE), file = ".RData")
,通常默认保存为当前工作目录下的.RData
文件。
- 基本用法:
- 使用
saveRDS()
函数- 特点:
saveRDS()
函数将单个 R 对象保存为一个序列化的 RDS 文件。与save()
不同,saveRDS()
只保存一个对象,并且不会保存对象的名称。例如,saveRDS(myObject, "myObject.rds")
将myObject
保存到myObject.rds
文件中。
- 特点:
重新导入变量
- 对于
save()
保存的.RData
文件
使用load()
函数:load("myData.RData")
将把之前使用save()
函数保存到myData.RData
文件中的所有变量重新加载到当前工作空间中。 - 对于
saveRDS()
保存的RDS
文件
使用readRDS()
函数:例如,myObject <- readRDS("myObject.rds")
将从myObject.rds
文件中读取并恢复之前保存的对象。
注意事项
- 路径问题
在保存和加载文件时,要注意文件路径的正确性。可以使用绝对路径来确保准确性,或者在相对路径中确保当前工作目录的设置符合预期。 - 对象覆盖
当重新导入变量时,如果当前工作空间中已经存在同名的变量,加载操作可能会覆盖原有的变量。在执行加载操作前,最好检查当前工作空间以避免意外的数据覆盖。
表格的导入与输出
此处表格就是指简单的表格,没有其他含义。
导入表格
- 从 CSV 文件导入
- read.csv () 函数
- 基本用法:
read.csv("file.csv")
是最常见的导入 CSV 文件的方式,它会将文件中的数据读取到一个数据框中。其中,file.csv
是文件路径(相对路径或绝对路径)。 - 参数设置:
header
:默认值为TRUE
,表示第一行作为列名。如果设置为FALSE
,则 R 会自动为列生成V1
、V2
等默认列名。例如,read.csv("file.csv", header = FALSE)
。sep
:指定分隔符,默认是逗号","
。如果文件使用其他分隔符(如分号";"
),可以通过read.csv("file.csv", sep = ";")
来读取。stringsAsFactors
:默认值为TRUE
,表示将字符型数据转换为因子(factor)。在现代数据分析中,通常设置为FALSE
以避免不必要的转换,如read.csv("file.csv", stringsAsFactors = FALSE)
。
- 基本用法:
- read.csv2 () 函数
- 适用场景:在一些地区,使用逗号作为小数点,分号作为分隔符。
read.csv2()
专门用于读取这种格式的 CSV 文件。例如,read.csv2("file.csv")
。
- 适用场景:在一些地区,使用逗号作为小数点,分号作为分隔符。
- read.csv () 函数
- 从 Excel 文件导入
- readxl 包
- 安装:使用
install.packages("readxl")
进行安装。 - 函数:
read_excel()
:可以读取.xlsx
和.xls
格式的 Excel 文件。例如,library(readxl); data <- read_excel("file.xlsx")
。- 可以指定工作表:
read_excel("file.xlsx", sheet = "Sheet1")
读取指定名称的工作表;read_excel("file.xlsx", sheet = 2)
按工作表的索引(从 1 开始)读取。
- 安装:使用
- readxl 包
- 从其他格式文件导入
- 从文本文件导入
read.table()
:用于读取一般的文本文件,格式相对灵活。例如,read.table("file.txt")
。read.delim()
:专门用于读取以制表符\t
分隔的文本文件,如read.delim("file.txt")
。
- 从固定宽度格式文件导入
read.fwf()
:用于读取固定宽度格式的文件,需要指定每个字段的宽度。例如,read.fwf("file.fwf", widths = c(10, 20, 15))
,其中widths
参数指定了每个字段的宽度。
- 从文本文件导入
导出表格
- 导出为 CSV 文件
- write.csv () 函数
- 基本用法:
write.csv(data, "newfile.csv")
将数据框data
导出为newfile.csv
文件。 - 参数:
row.names
:默认值为TRUE
,会导出数据框的行名。通常设置为FALSE
,如write.csv(data, "newfile.csv", row.names = FALSE)
,以避免在第一列额外导出行名。
- 基本用法:
- write.csv () 函数
- 导出为 Excel 文件
- openxlsx 包和 xlsx 包
- 安装:
install.packages("openxlsx")
或install.packages("xlsx")
。 - 使用:
- 使用
openxlsx
包时,library(openxlsx); write.xlsx(data, "file.xlsx")
可将数据框data
导出到file.xlsx
文件。 xlsx
包中的write.xlsx()
函数用法类似。
- 使用
- 安装:
- openxlsx 包和 xlsx 包
- 导出为其他格式
- 导出为文本文件
write.table()
:可以将数据框导出为文本文件,通过调整参数控制分隔符等格式。例如,write.table(data, "file.txt", sep = "\t")
以制表符分隔导出。
- 固定宽度格式
- 可以根据固定宽度格式的要求,自定义函数或者使用特定领域的包来进行导出,但这种情况相对较少。
- 导出为文本文件
二、在R中保存图片
基础图形系统(Base Graphics)下的图片保存
- 使用
pdf()
函数保存为 PDF 文件- 基本用法:
pdf("filename.pdf")
开启一个 PDF 图形设备,之后绘制的所有图形都会被保存到这个文件中,直到使用dev.off()
关闭设备。例如:
- 基本用法:
pdf("myplot.pdf")
plot(1:10)
dev.off()
- 参数调整:
width
和height
:可以指定页面的宽度和高度,单位为英寸。例如,pdf("myplot.pdf", width = 6, height = 4)
。onefile
:默认值为TRUE
,表示所有图形都保存在一个 PDF 文件中;如果设置为FALSE
,则每个图形会创建一个单独的 PDF 文件。
- 使用
png()
函数保存为 PNG 文件- 基本用法:
png("filename.png")
打开一个 PNG 图形设备,例如:
- 基本用法:
png("myplot.png")
hist(rnorm(100))
dev.off()
- 参数调整:
width
和height
:指定图像的像素宽度和高度,例如,png("myplot.png", width = 800, height = 600)
。res
:设置图像的分辨率,默认值通常为 72dpi。例如,png("myplot.png", res = 300)
可提高分辨率。
- 使用
jpeg()
函数保存为 JPEG 文件- 用法与
png()
类似,如jpeg("filename.jpeg")
打开 JPEG 图形设备,然后绘制图形,最后用dev.off()
关闭设备。 - 参数也包括
width
、height
和res
等,可根据需要调整图像质量和尺寸。
- 用法与
- 使用
bmp()
函数保存为 BMP 文件- 同样,
bmp("filename.bmp")
开启 BMP 图形设备,例如:
- 同样,
bmp("myplot.bmp")
boxplot(1:10)
dev.off()
- 参数有
width
、height
等,用于控制图像尺寸。
grid 图形系统和 ggplot2 包下的图片保存
- 在 ggplot2 中使用
ggsave()
函数- 基本用法:如果已经创建了一个 ggplot 对象(假设为
p
),可以直接使用ggsave("filename.png", p)
将图形保存为指定格式(这里是 PNG)的文件。 - 格式自动识别:
ggsave()
会根据文件名的后缀自动识别保存的格式,支持多种格式,如 PDF、PNG、JPEG 等。 - 参数调整:
width
、height
和dpi
:与基础图形系统中的参数类似,用于控制图像的尺寸和分辨率。例如,ggsave("myplot.pdf", p, width = 6, height = 4)
。
- 基本用法:如果已经创建了一个 ggplot 对象(假设为
使用eoffice保存图片
eoffice 是一个 R 语言的包,它可以用于将图片直接导出至 pptx 或 docx 文件(该package是近几年新出的,可能会有小问题,一般不会碰到;如有,自行度娘之)。
尽管如此,该package非常强大,将图片导出到pptx或docx之后可以非常自由的修改(请务必遵守学术规范使用之)。
- 保存至 ppt:使用
topptx
函数,例如topptx(filename = "mtcars.pptx")
。 - 保存至 docx:使用
todocx
函数,例如todocx(filename = "mtcars.docx")
。 - 支持多种方式输出图片,例如可以先使用
ggplot
绘制图片,然后通过topptx
输出,如topptx(p, filename = "mtcars.pptx"), width = 6, height = 4)
,其中p
是使用ggplot
绘制的图片。 - 支持表格从 ppt 或者 word 的输出和读取,例如
totable(head(mtcars), filename = "mtcars.pptx")
。 - 支持输出多种图片格式,例如
tofigure(p, filename = "mtcars.pdf")
。
三、R语言对象的class属性
查看class
属性
- 使用
class()
函数:这是最直接的方法,将对象作为参数传递给class()
函数即可查看其类属性。例如,对于一个数据对象x
,可以使用class(x)
来查看它所属的类。
修改class
属性
- 直接赋值(不推荐,可能导致不可预测的结果):在某些情况下,可以尝试直接对
class
属性进行赋值来修改对象的类。例如,对于一个对象obj
,可以尝试class(obj) <- "newClass"
。但这种方法非常危险,因为它可能破坏对象的内部结构,导致对象的行为不符合其新的类定义,并且在复杂的对象(如 S3、S4 或 R6 对象)中可能根本不起作用或者引发错误。 - 转换函数(推荐):对于特定类型的对象,可以使用相应的转换函数来改变其类属性。例如:
- 数据类型转换:使用
as.numeric()
、as.character()
、as.logical()
等函数将对象转换为不同的数据类型,这些函数在转换数据类型的同时也改变了对象的类属性。例如,x <- as.character(x)
将把x
的类属性从原来的数值型或其他类型转换为字符型。 - 特定类的转换:对于一些特殊的类,如将数据框转换为矩阵可以使用
as.matrix()
函数,df <- as.matrix(df)
将把数据框df
转换为矩阵,并相应地改变其类属性。
- 数据类型转换:使用
需要注意的是,在修改class
属性时,应确保新的类定义与对象的实际结构和内容相匹配,以保证对象在新的类下能够正常工作。随意修改class
属性可能导致错误,尤其是在处理复杂的面向对象编程结构(如 S4 和 R6 对象)时。
四、R语言中的attributes()
在 R 语言中,attributes()
函数是一个非常重要的函数,它用于获取或设置对象的属性(Attributes)。
属性是与对象相关联的额外信息或元数据,可以提供关于对象的更多描述或特征。这些属性可以包括对象的类、名称、维度、标签等。
当我们使用attributes()
函数时,它会返回一个列表,其中包含了对象的所有属性。每个属性都是一个键值对,键表示属性的名称,值表示属性的值。
例如,对于一个数据框(Data Frame)对象,它的常见属性可能包括列名(names)、行名(row.names)、类(class)等。通过attributes()
函数,我们可以获取这些属性的值,并进行进一步的处理或分析。
下面是一个更详细的示例:
# 创建一个数据框
df <- data.frame(x = 1:3, y = 4:6, z = 7:9)
# 获取数据框的属性
attrs <- attributes(df)
# 打印属性列表
print(attrs)
在上述示例中,我们创建了一个名为df
的数据框,然后使用attributes(df)
获取了它的属性,并将其存储在attrs
变量中。最后,我们打印出了属性列表。
通过查看属性列表,我们可以了解到数据框的一些重要信息,例如列名、行名等。此外,我们还可以使用attr()
函数来单独获取或设置某个特定属性的值。
例如,如果我们想获取数据框的列名,可以使用以下代码:
col_names <- attr(df, "names")
print(col_names)
同样,如果我们想设置某个属性的值,也可以使用attr()
函数,例如:
attr(df, "comment") <- "This is a data frame example."
总之,attributes()
函数和attr()
函数在 R 语言中提供了一种方便的方式来管理和操作对象的属性,这对于数据处理和分析非常有用。
在geneHapR中,有些时候对象,比如:hapResult、hapSummary、hapNet,只打印出一些基本信息,但其中往往包含了十分丰富的内容,此时,可以通过attributes()获取所有属性,或使用attr()函数获取希望查看的属性值,比如:查看hapNet每个不同类群中各单倍型的频率