一、xlsx 包介紹
雖然平時處理的文件一般都是txt 、csv文件,但其可讀性不如xlsx文件,在給別人展示你的分析結(jié)果時,一般就會用到xlsx文件。
試了很多包,比如...(我也忘了叫什么名字了),但論功能,xlsx的功能最多,最好用,但安裝有點麻煩。我覺得大家還是值得一試的
二、安裝
1. 在Rstudio上安裝:
xlsx 是可用于基于 java 寫的,調(diào)用 java 的函數(shù),所以需要系統(tǒng)先安裝 java 。然后在R里安裝rJava和xlsx兩個包就行了。
- 安裝 java
下載地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html, 需注冊。
我是Window 64位,下載介個:

我的安裝路徑:D:\02_Software\Java\jdk1.8.0_333,后面要用。
- 添加 java 環(huán)境變量
打開設(shè)置,搜索環(huán)境變量:

打開環(huán)境變量:

點擊下方系統(tǒng)變量的
新建

變量名設(shè)為:JAVA_HOME,咱都一樣的。
變量值就是剛才說的 java 安裝路徑,咱可能不一樣,我的是D:\Java\jdk1.8.0_261。
確定 > > 確定
重啟R(需不需要我也不知道??),輸入:
Sys.getenv("JAVA_HOME")
結(jié)果如下,則完成 java 環(huán)境配置。
Sys.getenv("JAVA_HOME")
[1] "D:\02_Software\Java\jdk1.8.0_333\jre"
- 安裝
rJava包
在 Rstudio 里安裝rJava包:
install.packages("rJava")
library("rJava")
如果蹦出來個下面的框說什么需要編譯,選否,反正我選是不能安裝成功??

- 安裝
xlsx包
在 Rstudio 里安裝xlsx包:
install.packages("xlsx")
library("xlsx")

warning 咱不用管哈。
到這里安裝步驟就完成了。
2 在服務(wù)器上安裝
- 下載jdk至服務(wù)器
-
解壓:
- 添加java環(huán)境變量:
在~/.bashrc里加入:
注意把中文換成路徑
export JAVA_HOME=解壓的包所在路徑/jdk1.8.0_261
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$JAVA_HOME/bin:$PATH
- 先安裝R包
rJava
install.packages("rJava")
如果安裝成功則繼續(xù)安裝xlsx:
install.packages("xlsx") - 如果報錯,反正我捯飭了很久,沒法給出普適的解決方案
20220726更新
下面第二種方法可以解決問題,如果不行就都試試吧
我只給出可能的解決方案:
- 如果在
java lib /user/bin/...這一行報錯:
運行:
R CMD javareconf JAVAC=/sibcb2/bioinformatics2/wangjiahao/software/java/jdk1.8.0_261/bin/javac JAR=/sibcb2/bioinformatics2/wangjiahao/software/java/jdk1.8.0_261/bin/jar JAVAH=/sibcb2/bioinformatics2/wangjiahao/software/java/jdk1.8.0_261/bin/javah
注意要把我的軟件路徑改成你的。
繼續(xù)安裝rJava
如果又報錯,我找到的解決方法是往
LD_LIBRARY_PATH里面加個server:
export LD_LIBRARY_PATH=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/lib/amd64/server:$LD_LIBRARY_PATH
具體加哪個sever我也不知道,多試試運行
R CMD javareconf -e
之后,rJava我就安裝成功了,xlsx也就安裝成功了
這幾種方法都試試, 重新開個shell或者R重復(fù)幾遍, 或許就能正常安裝xlsx了 ......
三、xlsx包的用法
用法很簡單,最常用的兩個函數(shù):read.xlsx()、write.xlsx(),詳情查看:https://cran.r-project.org/web/packages/xlsx/xlsx.pdf
read.xlsx()
read.xlsx(
file,
sheetIndex,
sheetName = NULL,
rowIndex = NULL,
startRow = NULL,
endRow = NULL,
colIndex = NULL,
as.data.frame = TRUE,
header = TRUE,
colClasses = NA,
keepFormulas = FALSE,
encoding = "unknown",
password = NULL,
...
)z
file:文件路徑,必需
sheetIndex: [number] 要讀取表中哪個 sheet,必需
rowIndex: [number vector] 要讀取的行的范圍
colIndex: [number vector] 要讀列的列的范圍
header: 是否讀取表頭,默認(rèn)TRUE,數(shù)據(jù)有列名則設(shè) TRUE
還有一個 col.names 選項,默認(rèn)FLASE,數(shù)據(jù)有行名則設(shè) TRUE,不知道這個選項官方文檔為什么沒有
write.xlsx()
write.xlsx(
x,
file,
sheetName = "Sheet1",
col.names = TRUE,
row.names = TRUE,
append = FALSE,
showNA = TRUE,
password = NULL
)
x: 要保存一個數(shù)據(jù)框,如果不是會強制轉(zhuǎn)換為數(shù)據(jù)框,不過我發(fā)現(xiàn)強制轉(zhuǎn)換會有點問題,所以最好手動轉(zhuǎn)換
file: 要保存的文件名,同樣這兩個是必須的參數(shù)
sheetName: 指定保存的sheet名字
col.names: 是否保存列名,默認(rèn)是
row.name: 是否保存行名,默認(rèn)是
append: 是否追加寫入,就是可以將一個sheet追加到一個已經(jīng)存在的xlsx文件里,默認(rèn)否
- 示例
x=matrix(c(1:12),3,4)
y=matrix(c(10:22),3,4)
dimnames(x) = list(c(1,2,3), c(1,2,3,4))
dimnames(y) = list(c(1,2,3), c(1,2,3,4))
> x
1 2 3 4
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
# 寫入
write.xlsx(x, "test1.xlsx", sheetName = "test1", col.names = F, row.names = F)
write.xlsx(y, "test1.xlsx", sheetName = "test2", append = T, col.names = F, row.names = F)
# 讀取
data_x = read.xlsx("test1.xlsx", 1, header = F)
data_y = read.xlsx("test1.xlsx", 2, header = F)
sub_data_x = read.xlsx("test1.xlsx", 1, header = F, colIndex = c(1:2), rowIndex = c(2:3))
