UpSetR 关联的 venneuler 包安装笔记
本文章已经设置了最低额度的付费阅读,如果您觉得文章对您有用,且手头宽裕,欢迎请作者喝杯热茶。本文章付费部分内容并不影响您对文章的阅读和理解,只是作者对付费阅读的一次尝试,感谢。
背景
R 语言中的 venneuler 是一个用于计算并显示韦恩图和欧拉图的包,这个包在 CRAN 上的最后一个版本是 1.1.0,发布于 2011-08-10,它是一个基于 rJava 依赖的 R 包。
vd <- venneuler(c(A=0.3, B=0.3, C=1.1, "A&B"=0.1, "A&C"=0.2, "B&C"=0.1 ,"A&B&C"=0.1))
plot(vd)
# same as c(A=1, `A&B&C`=1, C=1)
m <- data.frame(elements=c("1","2","2","2","3"), sets=c("A","A","B","C","C"))
v <- venneuler(m)
plot(v)
m <- as.matrix(data.frame(A=c(1.5, 0.2, 0.4, 0, 0),
B=c(0 , 0.2, 0 , 1, 0),
C=c(0 , 0 , 0.3, 0, 1)))
# without weights
v <- venneuler(m > 0)
plot(v)
# with weights
v <- venneuler(m)
plot(v)
在 venneuler 包,作者引入了一个的用于描述集合交集的向量,这一点后来也被UpSetR所借鉴,即UpSetR中的fromExpression。UpSetR接受三种类型的数据输入:
表格数据,即 R 语言里面的数据框。行表示元素,列表示数据集分配和额外信息。
元素名的集合(
fromList)。venneuler包引入的用于描述集合交集的向量 (fromExpression)。
早在 18 年 6 月的时候,我公众号上写过一篇关于
UpSetR的学习笔记《
UpSetR:多数据集绘图可视化处理利器》,提到过一下
venneuler,当时也没怎么留意,直到前不久有个读者在使用
UpSetR的时候给我了一个截图。

其实,这个截图中的
fromExpression拼写错了,如果UpSetR安装好了,函数fromExpression也拼写对了,截图中导入集合交集向量数据的问题也就迎刃而解。rJava,venneuler包的安装并没有想象中的那么好安装,尤其是venneuler。
问题
使用conda install r-venneuler安装完venneuler包后,library(venneuler)加载时出现动态库异常。
> library(venneuler)
Loading required package: rJava
Error occurred during initialization of VM
Unable to load native library: /usr/local/software/miniconda3/libjava.so: cannot open shared object file: No such file or directory
$ R CMD javareconf
Java interpreter : /usr/local/software/miniconda3/bin/java
Java version : 1.8.0_192
Java home path : /usr/local/software/miniconda3/jre
Java compiler : /usr/local/software/miniconda3/bin/javac
Java headers gen.: /usr/local/software/miniconda3/bin/javah
Java archive tool: /usr/local/software/miniconda3/bin/jar
trying to compile and link a JNI program
detected JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
detected JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
x86_64-conda_cos6-linux-gnu-cc -I"/usr/local/software/miniconda3/lib/R/include" -DNDEBUG -I/usr/local/software/miniconda3/jre/../include -I/usr/local/software/miniconda3/jre/../include/linux -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /usr/local/software/miniconda3/include -I/usr/local/software/miniconda3/include -Wl,-rpath-link,/usr/local/software/miniconda3/lib -fpic -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /usr/local/software/miniconda3/include -fdebug-prefix-map=/home/conda/feedstock_root/build_artifacts/r-base_1576190804673/work=/usr/local/src/conda/r-base-3.6.2 -fdebug-prefix-map=/usr/local/software/miniconda3=/usr/local/src/conda-prefix -c conftest.c -o conftest.o
x86_64-conda_cos6-linux-gnu-cc -shared -L/usr/local/software/miniconda3/lib/R/lib -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,-rpath,/usr/local/software/miniconda3/lib -Wl,-rpath-link,/usr/local/software/miniconda3/lib -L/usr/local/software/miniconda3/lib -Wl,-rpath-link,/usr/local/software/miniconda3/lib -o conftest.so conftest.o -L/usr/local/software/miniconda3/jre/lib/amd64/server -ljvm -L/usr/local/software/miniconda3/lib/R/lib -lR
JAVA_HOME : /usr/local/software/miniconda3/jre
Java library path: $(JAVA_HOME)/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
Updating Java configuration in /usr/local/software/miniconda3/lib/R
Done.
$ cd /usr/local/software/miniconda3
$ find ./ -name libjava.so
./pkgs/openjdk-8.0.192-h516909a_1004/jre/lib/amd64/libjava.so
./jre/lib/amd64/libjava.s
即使使用LD_LIBRARY_PATH添加完目标动态库后,后面出现的"java/lang/NoClassDefFoundError: java/lang/Object"异常也依然没办法解决。
$ export LD_LIBRARY_PATH=/usr/local/software/miniconda3/jre/lib/amd64:$LD_LIBRARY_PATH
$ R
R version 3.6.2 (2019-12-12) -- "Dark and Stormy Night"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(venneuler)
Loading required package: rJava
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
为了避免 base 环境的影响,使用 conda create -n r-3.6.2 r-base=3.6.2创建的新环境中发现,conda install -r r-venneuler会同时执行 openjdk,r-rjava,r-venneuler三个包的安装,并解决它们其中的依赖,但即使安装过程没有任何问题,在使用library(venneuler)后上面提到的问题也仍然会出现。
conda环境中openjdk,r-rjava,r-venneuler都可以安装成功,但就是用不了,这是我在 conda 中遇到的问题,暂时没找到解决方法。
解决
抛弃了 conda 后,用最原始的方法,终于可以解决这个问题,下面是记录。
1. 安装二进制的 java
在
Java SE 7 Archive Downloads 页面下载
jdk-7u80-linux-x64.tar.gz,解压缩。

$ tar zvxf jdk-7u80-linux-x64.tar.gz
$ mv jdk1.7.0_80 /usr/local/software
2. Java 环境配置
把下面的内容添加到~/.bashrc最后,source ~/.bashrc执行环境变量更新。
export PATH=/usr/local/software/jdk1.7.0_80/bin:$PATH
export JAVA_HOME=/usr/local/software/jdk1.7.0_80
export JRE_HOME=/usr/local/software/jdk1.7.0_80/jre
export LD_LIBRARY_PATH=/usr/local/software/jdk1.7.0_80/lib/amd64:/usr/local/software/jdk1.7.0_80/jre/lib/amd64:$LD_LIBRARY_PATH
3. 更新 R 的 java 配置
如果没有更新 R 语言的java支持配置,直接执行isntall.packages(rJava)可能会引发以下问题:
checking whether JNI programs run... configure: error: Unable to run a simple JNI program.
Make sure you have configured R with Java support (see R documentation) and check config.log for failure reason.
所以,请使用下面的命令更新 R 语言的 java 支持配置:
$ /usr/local/software/miniconda3/bin/R CMD javareconf
Java interpreter : /usr/local/software/jdk1.7.0_80/jre/bin/java
Java version : 1.7.0_80
Java home path : /usr/local/software/jdk1.7.0_80
Java compiler : /usr/local/software/jdk1.7.0_80/bin/javac
Java headers gen.: /usr/local/software/jdk1.7.0_80/bin/javah
Java archive tool: /usr/local/software/jdk1.7.0_80/bin/jar
trying to compile and link a JNI program
detected JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
detected JNI linker flags : -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
x86_64-conda_cos6-linux-gnu-cc -I"/usr/local/software/miniconda3/lib/R/include" -DNDEBUG -I/usr/local/software/jdk1.7.0_80/include -I/usr/local/software/jdk1.7.0_80/include/linux -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /usr/local/software/miniconda3/include -I/usr/local/software/miniconda3/include -Wl,-rpath-link,/usr/local/software/miniconda3/lib -fpic -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /usr/local/software/miniconda3/include -fdebug-prefix-map=/home/conda/feedstock_root/build_artifacts/r-base_1576190804673/work=/usr/local/src/conda/r-base-3.6.2 -fdebug-prefix-map=/usr/local/software/miniconda3=/usr/local/src/conda-prefix -c conftest.c -o conftest.o
x86_64-conda_cos6-linux-gnu-cc -shared -L/usr/local/software/miniconda3/lib/R/lib -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,-rpath,/usr/local/software/miniconda3/lib -Wl,-rpath-link,/usr/local/software/miniconda3/lib -L/usr/local/software/miniconda3/lib -Wl,-rpath-link,/usr/local/software/miniconda3/lib -o conftest.so conftest.o -L/usr/local/software/jdk1.7.0_80/jre/lib/amd64/server -ljvm -L/usr/local/software/miniconda3/lib/R/lib -lR
JAVA_HOME : /usr/local/software/jdk1.7.0_80
Java library path: $(JAVA_HOME)/jre/lib/amd64/server
JNI cpp flags : -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
JNI linker flags : -L$(JAVA_HOME)/jre/lib/amd64/server -ljvm
Updating Java configuration in /usr/local/software/miniconda3/lib/R
Done.
4. 安装 rJava 和 venneuler
上面的步骤完成后,在 R 中使用rJava和venneuler,发现一切正常。
install.packages("rJava")
install.packages("venneuler")
后话
本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
UpSetR 关联的 venneuler 包安装笔记的更多相关文章
- mariadb 10.1.26 二进制包安装笔记
报错链接:http://php.upupw.net/ank2discuss/40/6841-e.html mariadb 10.1.26 二进制版本 全名称: mariadb-10.1.26-linu ...
- 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程
简述C#中IO的应用 在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...
- MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记
MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记 说明 以root账户登录Linux操作系统,注意:本文中的所有命令行前面的 #> 表示命令行提示符 ...
- ArchLinux 安装笔记:续 --zz
续前话 在虚拟机里调试了几天,终于鼓起勇气往实体机安装了,到桌面环境为止的安装过程可以看我的前一篇文章<ArchLinux 安装笔记>.桌面环境我使用的是 GNOME,虽然用了很长一段时间 ...
- Zabbix源码包安装
Zabbix源码包安装 Cenos5.3 Basic server 安装顺序 Libxml2 Libmcrypt Zlib Libpng Jpeg:需要创建目录jpeg /bin /lib / ...
- laravel安装 笔记
http://laod.cn/hosts/2015-google-hosts.html 谷歌FQIP laravel安装和设置流程 1安装composer , VirtualBox和Vagrant 下 ...
- python 库安装笔记
python 库安装笔记 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-2-22 友情提示 安装python库的过程中 ...
- 开始使用gentoo linux——gentoo安装笔记(下)
gentoo安装笔记(下) 上一章,已经对操作系统安装做了充分准备,并且已经从livecd(u盘系统)切换进入了gentoo安装环境中. 不过现在才是真正的开始!打起精神!这可不是在装ubuntu! ...
- 开始使用gentoo linux——gentoo安装笔记(上)
gentoo linux安装笔记(上) 家里有一台破旧的富士通笔记本,08年至今质量依然杠杠的,但是性能已经不能和现代超极本同日而语,装上了ubuntu更是不敢恭维,别提gnome和kde的linux ...
- Linux:Gentoo系统的安装笔记(一)
这次我选择安装Gentoo,用来做我学习的笔记.这次我是使用虚拟机安装Gentoo,一是方便操作,二是可以看着手册,一边看一边操作,严格按照手册上的步骤执行,一般是不会出现问题的. 查看手册最好学会看 ...
随机推荐
- python + BeautifulSoup + selenium 实现爬取中医智库的古籍分类的数据
爬取内容为 该图片下的七个分类, 然后对应的每个种类的书本信息(摘要和目录) 效果为 代码如下 import requests from bs4 import BeautifulSoup import ...
- urllib.parse的使用
urllib简介 urllib是pyhton自带的标准库用于网络请求库,无需安装,直接引用 通常用于爬虫开发,API(应用程序编程接口)数据获取和测试 urllib库的4大模块 urllib.requ ...
- [Linux/Redis]搭建Redis集群
1 基本信息 3台服务器(CentOS7.3) 192.168.1.101 node101 192.168.1.102 node102 192.168.1.103 node103 2 单机 安装 Re ...
- LeeCode 713 乘积小于k的子数组
LeeCode 713 题目描述: 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 标签: 双指针.滑动窗口 建立模型 枚举子数组的右端 ...
- scikit-learn 中 Boston Housing 数据集问题解决方案
scikit-learn 中 Boston Housing 数据集问题解决方案 在部分旧教程或教材中是 sklearn,现在[2023]已经变更为 scikit-learn 作用:开源机器学习库,支持 ...
- 【JavaSE】网络编程
1. 网络编程概述 网络编程的目的:直接或者间接地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程两个主要的问题: ①如何精准地定位网络上的一台或多台主机,并定位主机上的特定应用 ②找到主机 ...
- 【SSM项目】尚筹网(四)JWT以及基于拦截器的前后端分离登录验证
引入JWT前后端交互 JsonWebToken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.JWT就是一段字符串,分为三段[头部.载荷.签证]. 1 后端配置 1.1 ...
- GPT-4:思考的曙光还是数据的缩影?
海盗分金,GPT-4初露锋芒 GPT系列模型横空出世后,其是否真实具有思考和推理的能力一直被业界关注.GPT-3.5在多条狗问题和海盗分金问题上表现糟糕.GPT-4在这两个谜题上给出的答案令人惊喜,甚 ...
- 帝国cms7.5和7.2 搜素模板支持 php和灵动标签以及不起作用
帝国CMS搜索模板不支持动态标签调用,从7.0到7.2再到刚发布的7.5,帝国官方团队始终没解决这个问题,这很不方便,但是帝国的强大可以让我们忽略这个问题,今天老威就把这个bug的解决方法说一下. 第 ...
- DRF版本控制(源码分析)
DRF中版本控制的五种情况(源码分析) 在restful规范中要去,后端的API中需要体现版本. drf框架中支持5种版本的设置. 1. URL的GET参数传递(*) 示例: user/?versio ...