imtoken官网安卓版下载|vsn

作者: imtoken官网安卓版下载
2024-03-07 21:53:25

VSN游戏饰品道具交易平台,跨平台无CD最方便

VSN游戏饰品道具交易平台,跨平台无CD最方便

<%= webpackConfig.name %>

TortoiseSVN 使用教程 | 菜鸟教程

TortoiseSVN 使用教程 | 菜鸟教程

菜鸟教程 -- 学的不仅是技术,更是梦想!

首页

HTML

CSS

JavaScript

Vue

Bootstrap

NodeJS

Python3

Python2

Java

C

C++

C#

Go

SQL

Linux

jQuery

本地书签

首页

HTML

CSS

JS

本地书签

Search

Python3 教程

Python2 教程

Vue3 教程

vue2 教程

Bootstrap3 教程

Bootstrap4 教程

Bootstrap5 教程

Bootstrap2 教程

SVN 教程

SVN 教程

SVN 简介

SVN 安装

SVN 生命周期

SVN 启动模式

SVN 创建版本库

SVN 检出操作

SVN 解决冲突

SVN 提交操作

SVN 版本回退

SVN 查看历史信息

SVN 分支

SVN 标签

TortoiseSVN 使用教程

SVN 标签

TortoiseSVN 使用教程

TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。

TortoiseSVN 安装

下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。

目前最新版为 1.11.0 下载地址:

https://osdn.net/projects/tortoisesvn/storage/1.11.0/

在语言补丁包中我们可以找到中文的补丁并下载下来:

运行下载的 TortoiseSVN 安装程序

运行下载的 TortoiseSVN 中文语言包

正确安装后,应该进行一次的重开机,以确保 TortoiseSVN 的正确无误。

修改 TortoiseSVN 默认语言

TortoiseSVN 安装完后默认的界面是英文的,我们可以通过设置修改成已安装语言

TortoiseSVN 的使用

建立一个 runoob01 的工作目录

所谓的 runoob01 目录其实就是您平常用来存放工作档案的地方。通常我们会等到自己的工作做的一个段落的时候再进行备份。所以我们平常都是在 runoob01 目录下面工作,等到适当时机在 commit 到 repository 中。举例来说,我们想在 D 盘下面建立一个名为 runoob01 的目录。首先先把这个目录建立出来。

进入创建的目录在空白处按下右键后(您可以在 MyWork 目录的 icon 上按,也可进入 MyWork 目录后,在空白的地方按),选择 SVN checkout。

接着您可以看到如下的画面:

首先我们要填入的是 repository(版本库)的位置,对于 SVN 来说,repository 的位置都是 URL。版本库 URL 这里填入我们测试的版本仓库地址 svn://10.0.4.17/runoob01。

接着,稍微看一下 Checkout directory(检出至目录),这个字段应该要指向您的 runoob01 目录。

确认后,按下 OK 按钮,您应该可以看到如下的信息窗口。

这样就表示动作完成。按下 OK 按钮后,再到您刚刚建立的目录下。您将会看到 MyWork 目录下面多了一个名为 .svn 的目录(这个目录是隐藏的,如果您的档案管理员没有设定可以看到隐藏目录,您将无法看到它) 。

如果您要在一个已经存在的 SVN Server 上面 checkout 出上面的档案,您只需要给定正确的 SVN URL 以及要 checkout 目录的名称。就可以取得指定的档案及目录了。

新增档案及目录到 Repository 中 add commit

创建目录 dir01, 在目录里新增文件

将新增的文件加入到 SVN 版本控制中,TortoiseSVN 会把准备要加入的档案及目录,勾选需要加入的文件。

按下 OK 后,您将会看到如下的讯息窗口:

这个 Add(增加)的动作并未真正的将档案放到 Repository 中。仅仅是告知 SVN 准备要在 Repository 中放入这些档案。

此时的文件状态为:

这些档案真正的放入到 Repository 中,空白处右键选择 SVN commit(提交)

紧接着,您将会看到如下的窗口出现:

在这里可以清楚地了解到哪些档案要被 commit 到 repository(版本库)中。同样的,如果您有档案不想在这个时候 commit 到 Repository,您可以取消选取的档案,这样他们就不会被 commit 到 Repository 中。在"信息"文本框中可以写入对本次 commit 的说明。

点击"确认"后完成 commit 动作,然后您可以到 runoob 目录中,确定是否所有的档案 icon 都有如下的绿色勾勾在上面,这样代表您的档案都正确无误的到 repository 中。

更新档案及目录 update

由于版本控制系统多半都是由许多人共同使用。所以,同样的档案可能还有人会去进行编辑。为了确保您工作目录中的档案与 Repository 中的档案是同步的。建议您在编辑前都先进行更新的动作。

在想要更新的档案或目录 icon 上面按下鼠标右键。并且选择 SVN Update。

有时我们需要回溯至特定的日期或是版本,这时就可以利用 SVN 的 Update to revision 的功能。在想要更新的档案或目录 icon 上面按下鼠标右键。并且选择 TortoiseSVN->Update to revision(更新至版本)。

复制档案及目录 branch

很多时候您会希望有另外一个复制的目录来进行新的编修。等到确定这个分支的修改已经完毕了,再合并到原来的主要开发版本上。举例来说,我们目前在runoob01/trunk下面有如下的目录及档案:

现在,我们要为 trunk 这个目录建立一个 branch。假设我们希望这个目录是在 D:\runoob01\branch。首先我们可以在 trunk 目录下面的空白处,或是直接在 trunk 的 icon 下面按下鼠标右键选择 Branch/Tag…(分支/标记)这个选项,您将会看到如下的对话框出现。

请先确认 From WC at URL(从工作副本/URL): 中的目录是您要复制的来源目录。接着,在 To URL(至路径)中输入您要复制过去的路径。通常我们会将所有的 branch 集中在一个目录下面。以上面的例子来说,branch 档案都会集中在 branch 的子目录下面。在 To URL 中您只需要输入您要的目录即可。目录不存在时,会由 SVN 帮您建立。特别需要注意的是 SVN 以斜线作为目录分隔字符,而非反斜线。

接着在 Log message(日志信息)输入您此次 branch 的目的为何。按下 OK 就可以了。

如果成功,将可以看到下面的画面:

按下 OK 就可以关闭这个窗口了。如果您此时立刻去 runoob01 目录的 branch 子目录下面,您将会失望的发现在该目录下面并没有刚刚指定的目录存在。这是因为您 runoob01 目录的部份还是旧的,您只需要在 branch 子目录下面进行 SVN update 就可以看到这个新增的目录了。新增的目录就与原来的目录无关了。您可以任意对他进行编辑,一直到您确认好所有在 branch 下面该做的工作都完成后,您可以选择将这个 branch merge 回原来的 trunk 目录,或者是保留它在 branch 中。

合并动作 merge

假如我们在 branch 分支中对文件进行了修改或增加了文件,要 merge 回 trunk 目录中,方法很简单。以上面的例子来说,我们在 D:\runoob01\trunk目录空白处,按下鼠标右键,选择 Merge(合并):

这个画面主要分为三个部份,前面的 From: 与 To: 是要问您打算从 Branch 中的哪个版本到哪个版本,merge 回原来的 trunk 目录中。因此,From 跟 To 的 URL 字段应当都是指定原来 branch 的目录下。剩下的就是指定要 merge 的 revision 范围。以上面的例子而言,我们从 Branch 的 Revision 7 开始 merge 到 Branch 下面的最新版本。您可以透过,Try run 按钮,试作一次 Merge。这个 merge 只会显示一些讯息,不会真正的更新到 trunk 的目录去。只有按下 Merge 按钮后,才会真正的将 branch 的档案与 trunk 的档案合并起来。

如果您确认这次的 merge 没有问题,您可以直接使用 commit 来将这两个被修改的档案 commit 回 SVN repository 上。如果有问题,您可以直接修改这两个档案,直到确认 ok 了,再行 commit。

制作 Tag 或是 Release

所谓的 Tag 或是 Release 就是一个特别的版本,因为这个版本可能有特别的意义。例如:这个版本是特别的 Milestone 或是 release 给客户的版本。其实,Tag 与 Release 的作法与 Branch 完全相同。只是 Branch 可能会需要 merge 回原来的 trunk 中,而 tag 及 release 大部分都不需要 merge 回 trunk 中。

举例来说,今天我们的 trunk 做了一版,这个版本被认定是软件的 1.0 版。

1.0版对于开发来说是一个非常重要的里程碑。所以我们要特别为他做一个标记,亦即 Tag。假设,这个 1.0 版是要正式 release 给客户或是相关 vendor,我们要可以为他做一个 Release 的标记。基本上,SVN 只有目录的概念,并没有什么 Tag 的用法。所以您会看到在 SVN 的选单上面,Branch 与 Tag 是同一个项目。以这个 1.0 的例子来说,我们在 runoob01 目录下创建 tags 目录用于存放打 tag 的版本,并提交到版本库,然后在 Trunk 上面,按下鼠标右键,选择 Branch/Tag 的项目:

成功的话,您就在对应的 Tag 目录下面建立了一个 v1.0 的目录。当然,如果您这时到 Tag 的目录下面去,会看不到这个目录,您需要在 Tag 目录下面 update 一下,才能看到它。

SVN 标签

点我分享笔记

取消

分享笔记

昵称昵称 (必填)

邮箱邮箱 (必填)

引用地址引用地址

分类导航

HTML / CSSHTML 教程HTML5 教程CSS 教程CSS3 教程Bootstrap3 教程Bootstrap4 教程Bootstrap5 教程Font Awesome 教程Foundation 教程 JavaScriptJavaScript 教程HTML DOM 教程jQuery 教程AngularJS 教程AngularJS2 教程Vue.js 教程Vue3 教程React 教程TypeScript 教程jQuery UI 教程jQuery EasyUI 教程Node.js 教程AJAX 教程JSON 教程Echarts 教程Chart.js 教程Highcharts 教程Google 地图 教程 服务端Python 教程Python2.x 教程Linux 教程Docker 教程Ruby 教程Java 教程C 教程C++ 教程Perl 教程Servlet 教程JSP 教程Lua 教程Rust 教程Scala 教程Go 教程PHP 教程数据结构与算法Django 教程FastAPI 教程Zookeeper 教程设计模式正则表达式Maven 教程Verilog 教程ASP 教程AppML 教程VBScript 教程 数据库SQL 教程MySQL 教程PostgreSQL 教程SQLite 教程MongoDB 教程Redis 教程Memcached 教程 数据分析Python 教程NumPy 教程Pandas 教程Matplotlib 教程Scipy 教程R 教程Julia 教程 移动端Android 教程Swift 教程jQuery Mobile 教程ionic 教程Kotlin 教程 XML 教程XML 教程DTD 教程XML DOM 教程XSLT 教程XPath 教程XQuery 教程XLink 教程XPointer 教程XML Schema 教程XSL-FO 教程SVG 教程 ASP.NETASP.NET 教程C# 教程Web Pages 教程Razor 教程MVC 教程Web Forms 教程 Web ServiceWeb Service 教程WSDL 教程SOAP 教程RSS 教程RDF 教程 开发工具Eclipse 教程Git 教程Svn 教程Markdown 教程 网站建设HTTP 教程网站建设指南浏览器信息网站主机教程TCP/IP 教程W3C 教程网站品质

Advertisement

反馈/建议

在线实例

·HTML 实例

·CSS 实例

·JavaScript 实例

·Ajax 实例

·jQuery 实例

·XML 实例

·Java 实例

字符集&工具

· HTML 字符集设置

· HTML ASCII 字符集

· JS 混淆/加密

· PNG/JPEG 图片压缩

· HTML 拾色器

· JSON 格式化工具

· 随机数生成器

最新更新

·

Rust 宏

·

Seaborn 教程

·

Pandas 相关性分析

·

31.2k star, 免...

·

Dev Home —...

·

免费开源的 AI ...

·

11.2k star, 免...

站点信息

·

意见反馈

·

免责声明

·

关于我们

·

文章归档

关注微信

Copyright © 2013-2024 菜鸟教程 

runoob.com All Rights Reserved. 备案号:闽ICP备15012807号-1

微信关注

SVN下载、安装、配置及使用方法_svn客户端-CSDN博客

>

SVN下载、安装、配置及使用方法_svn客户端-CSDN博客

SVN下载、安装、配置及使用方法

最新推荐文章于 2023-10-24 15:33:21 发布

WinstonLau

最新推荐文章于 2023-10-24 15:33:21 发布

阅读量5.8w

收藏

248

点赞数

51

分类专栏:

# 软件

文章标签:

svn

下载

安装

配置

使用方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/winstonlau/article/details/79794967

版权

软件

专栏收录该内容

71 篇文章

6 订阅

订阅专栏

文章目录

SVN是什么相关概念为什么需要SVNSVN的特点TortoiseSVN VisualSVN Subversion 以及 VisualSVN Server的区别为什么不直接使用SubversionSVN下载SVN服务端安装SVN服务端配置SVN客户端安装如何验证SVN客户端是否安装成功SVN客户端汉化包的下载、安装使用SVN客户端连接SVN服务器SVN三大指令SVN常用图标解释

SVN是什么

SVN 是 Subversion 的简称,是一个开源的版本控制系统,CVS的接班人,目前绝大多数公司都是用 SVN 作为版本控制软件

相关概念

SCM: 全称是 Software Configuration Management,即软件配置管理,意思就是对软件的源代码进行控制与管理

为什么需要SVN

SVN 可以用于协作开发、远程开发和版本回退

SVN的特点

操作简单,入门容易,支持跨平台(Windows、Linux、MacOS) 支持版本回退功能(时间机器) 属于 C/S 结构的软件,因此使用 SVN 需要分别安装客户端和服务端

TortoiseSVN VisualSVN Subversion 以及 VisualSVN Server的区别

客户端软件: TortoiseSVN 和 VisualSVN 服务端软件: Subversion 和 VisualSVN Server 从根本上说,TortoiseSVN(内核使用的是 Subversion) 和 VisualSVN 都是 Subversion 的衍生物,是 为 Subversion 服务的。 TortoiseSVN 可以很方便地向服务器提交代码、从服务器下载代码以及查看自己以前提交的代码 VisualSVN 是 SVN 的客户端,和 Visual Studio 集成在一起,VisualSVN 是收费的 Subversion 是 SVN 的源码库,是一个集成了客户端和服务端的“内核”,相关配置需要手动进行 VisualSVN Server 的内核使用的也是 Subversion,它包括 apache、Subversion 和 WMI(用于实现操作界面等),而且其中的很多配置都已经配置好了,比较容易上手,VisualSVN Server 标准版是免费的,企业版是收费的,在安装时可自行选择

为什么不直接使用Subversion

因为 Subversion 比较偏向于底层,我们需要用到的很多东西都没有集成,对于新手来说,使用难度很大

SVN下载

客户端软件下载请点击这里 服务端软件下载请点击这里

SVN服务端安装

说明: 由于软件版本的不一致,安装界面上可能会有些许区别,这里使用的是 VisualSVN-Server-3.8.1-x64

双击安装文件,点击 Next 勾选协议,点击 Next 使用默认选项,点击 Next 单击 Standard Edition 选择软件安装位置、仓库位置、端口号以及备份文件位置 单击 Install 安装完成,点击 Finish 如果电脑安装了360或者类似的安全软件,那么在软件安装过程中可能会拦截一些东西,这时只要都选择允许即可

SVN服务端配置

创建一个项目(以 Shop 为例)

首先在 SVN 服务器端的安装根目录下创建一个公有目录 WebApp 作为项目目录 在 WebApp 目录下创建 Shop 文件夹,作为 Shop 的版本仓库 注意:

在 SVN 中没有项目的概念,所有的文件夹都称之为版本仓库,一个项目就是一个仓库 现在的 Shop 文件夹还仅仅只能称之为一个普通文件夹,还不能称之为版本仓库,因为它还没有和 SVN 服务器产生任何联系,下面要做的就是将这个普通的文件夹转换为版本仓库 创建版本仓库,基本语法如下:

打开 cmd,输入如下命令(这里的路径名和最后的项目名应和自己电脑上的一致,下同) svnadmin create D:\VisualSVN-Server-3.8.1-x64\WebApp\Shop

回车,如果 Shop 文件夹下出现了如下目录,则说明创建版本仓库成功,如果报错,则可以尝试重启电脑,以使指令生效

启动服务端监管

什么是服务端监管

对于Apache来说,我们通过在浏览器中输入 http://localhost(或ip地址) 来访问相关的文件,这个过程就叫做服务端监管 对于 SVN 来说,我们通过在浏览器中输入 svn://localhost(或ip地址) 来访问相关的数据仓库(如Shop仓库),这个过程就叫做服务端监管

如何启动服务端监管

打开 cmd,输入如下命令: svnserve -d -r D:\VisualSVN-Server-3.8.1-x64\WebApp\Shop

说明:

-d 表示后台运行-r 表示监管目录 回车,可以看到光标一直在闪烁,说明指令执行成功 特别注意:不要关闭当前的 cmd 窗口,如果关闭了,那么监管指令就强行终止了,也就没办法进行数据的连接了 通过以上指令,我们的 svn://localhost(或ip地址) 就可以直接指向 Shop 版本仓库,也就是说,当我们在浏览器中输入 svn://localhost(或ip地址) 的时候,就可以访问到 Shop 仓库下的相关数据,也即实现了监管

权限控制:

默认情况下,SVN服务器是不允许匿名用户上传文件到服务端的,所以必须更改项目的相关配置文件 如何更改相关权限

打开 Shop 文件夹中的 conf 文件夹,可以看到如下文件 用记事本打开 svnserve.conf 文件,找到 # anon-access = read ,将其更改为 anon-access = write ,然后保存,即将用户的权限由只可读改为可读可写

SVN客户端安装

说明: 由于软件版本的不一致,安装界面上可能会有些许区别,这里使用的是 TortoiseSVN-1.9.7.27907-x64-svn-1.9.7

双击安装文件,点击 Next 点击 Next 选择软件安装位置,然后点击 Next 点击 Install,直至软件安装完成,最后点击 Finish

如何验证SVN客户端是否安装成功

在桌面点击鼠标右键,如果结果如下图所示,则表示安装成功

SVN客户端汉化包的下载、安装

下载

点击这里 在打开的页面中往下拉,找到下图所在位置,并下载对应的汉化包(速度可能会比较慢,耐心等待一会)

安装

双击运行汉化包,点击 Next,等待安装完成,最后点击 Finish即可 安装完成后,在桌面点击鼠标右键,选择 TortoiseSVN --> Settings --> General,然后在右边的 Language 一栏选择简体中文,最后点击确定,再次打开设置界面时,就会发现是中文的了 如果想切换回英文,只需在上一步中将 Language 改为 English 即可

使用SVN客户端连接SVN服务器

相关说明

首先,我们设想这样一个使用场景:公司在开发项目时,需要把项目部署在 SVN 服务器上,假设这台 SVN 服务器的 IP 地址为 192.168.1.1 以之前的 Shop 为例,当要开发这个项目时,项目经理会把项目相关的配置和初始化工作做好 项目相关的配置也即上面所提到的 SVN 服务端的配置这部分工作 项目的初始化涉及到的有:编写核心框架、编写核心函数库等,项目经理在自己的电脑上完成这些文件的编写后,就会使用 commit 指令将这些文件上传到 SVN 服务器的 Shop 项目中(在使用 commit 命令之前,需要先使用 checkout 指令与服务器建立连接,下面会详细说明) 项目经理的 checkout(检出)过程

重要说明:

当项目经理在 SVN 服务器上完成了项目的配置之后,接下来要做的就是在自己的电脑上通过 SVN 客户端与 SVN 服务器建立连接 无论是项目经理还是程序员,如果想建立与 SVN 服务器的连接并更新数据到本地,第一次的操作都是 checkout 当项目经理使用 checkout 指令与服务器建立连接后,会从服务器下载一个名为 .svn 的隐藏文件夹到本地,这个文件夹是否出现也是检出成功与否的标志 在第一次之后,如果还需要下载服务器端的数据到本地,则使用的是 update 指令,而不再是 checkout 指令 我们把第一次与 SVN 服务器进行连接操作并更新 Shop 项目中的相关数据到本地的过程称之为检出

项目经理 checkout 的步骤:

首先要启动服务端监管,方法在上面已经介绍过 假设自己现在是项目经理,在自己电脑中选择一个位置新建一个文件夹,在这里我选择的是 E:\Shop ,然后在 Shop 文件夹下新建一个名为 jingli 的文件夹 进入 jingli 这个文件夹,在空白处点击鼠标右键,选择 TortoiseSVN --> 版本库浏览器(汉化之后的名称,下同) 在弹出的窗口中输入如下图所示 URL,这里因为是在本机测试,所以写的是 localhost,如果不是在本机,就写 SVN 服务器的 IP 地址,比如上面提到的 192.168.1.1 点击确定之后,会弹出如下界面,选中左边栏的条目,用鼠标右键单击,然后在弹出的菜单中单击检出 在接着弹出的如下两个窗口中都点击确定即可,这时在 jingli 这个文件夹下就会生成一个名为 .svn 的隐藏文件夹,将其显示出来即可看到,这也是我们与 SVN 服务器成功建立连接的标志。至此,项目经理的 checkout 的过程已全部完成

SVN三大指令

检出(checkout)

前提:必须先启动服务端监管 作用:链接到 SVN 服务器、更新服务端数据到本地 注意:checkout 只在第一次链接时使用一次,以后如果进行更新操作请使用 update 指令,这点在前面已经提到过,这里再强调一次 提交(commit)

前提:必须先启动服务端监管 作用:提交本地数据到服务器 如何使用 commit 指令

以项目经理为例,假设项目经理在自己的电脑上(也就是在上面提到的 jingli 这个文件夹下)编写好了项目的需求文档等文件,现在需要把这些文件上传到 SVN 服务器,那么只需在进入 jingli 这个文件夹后,在空白位置单击鼠标右键,然后单击 SVN提交 即可,如下图所示: 点击 SVN提交 之后,会出现如下窗口,勾选需要上传的文件和目录/文件夹,然后点击确定,若出现下图2所示界面,则代表提交成功 特别注意:备注信息必须填写 更新(update)

前提:必须先启动服务端监管 作用:将服务器上的数据下载到本地 使用方法:进入项目文件所在文件夹,在空白处点击鼠标右键,然后点击 SVN更新 ,如果出现如下窗口,则表明更新成功

SVN常用图标解释

如何查看所有图标 在任一空白处点击鼠标右键 ——> TortoiseSVN ——> 设置 ——> 图标覆盖 ——> 图标集,即可查看所有图标 图标含义解释

常规图标 含义:当客户端文件与服务端文件完全同步时,系统显示这个图标 冲突图标 含义:当客户端提交的文件与服务端已存在的文件有冲突时,系统显示这个图标 删除图标 含义:当服务端数据已删除,那么在客户端的该文件就会显示这个图标 增加图标 含义:当我们编写的文件已添加到提交队列,但还没有提交成功时,系统就会显示这个图标 无版本控制图标 含义:当我们编写的文件没有添加到上传队列时,系统就会显示这个图标 修改图标 含义:当客户端文件有修改但还未提交时,系统就会显示这个图标 只读图标 含义:当客户端文件以只读形式存在时,系统就会显示这个图标 锁定图标 含义:当服务端数据已锁定,那么客户端文件就会显示这个图标 忽略图标 含义:当客户端文件已忽略,不需要进行提交时,就会显示这个图标

优惠劵

WinstonLau

关注

关注

51

点赞

248

收藏

觉得还不错?

一键收藏

知道了

5

评论

SVN下载、安装、配置及使用方法

SVN是什么SVN 是 Subversion 的简称,是一个开源的版本控制系统,CVS的接班人,目前绝大多数公司都是用 SVN 作为版本控制软件相关概念SCM: 全称是 Software Configuration Management,即软件配置管理,意思就是对软件的源代码进行控制与管理为什么需要SVNSVN 可以用于协作开发、远程开发和版本回退SVN的特点操作简单,入门容易,支持跨

复制链接

扫一扫

专栏目录

SVN使用教程总结

weixin_34267123的博客

09-13

1万+

SVN简介:

 为什么要使用SVN?

      程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。

Subversion是什么?

   它是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版本,或是检查数据修改的历史,Subvers...

SVN安装配置与使用(完美版)

01-30

1、所选服务器安装包:VisualSVN-Server-2.1.3.msi、2、客户端安装包:TortoiseSVN-1.6.2.16344-win32-svn-1.6.2.msi注意:location:为安装文件位置,Repositories:为管理的代码仓库的位置,若选中Use

secureconnection前面的Checkbox,则表示安全连接【https】,这里的端口有433/8433可用,若未选中Checkbox,默认端口80/81/8080,身份认证选择Sub

5 条评论

您还未登录,请先

登录

后发表或查看评论

SVN客户端使用教程

学习笔记

01-29

2633

SVN是什么?全称Subversion,属于集中式文件版本控制系统,有一个单一的集中管理的服务器,保存所有文件的修订版本,协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。代码版本管理工具它能记住你每一次的代码修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件SVN相比于Git的优势SVN使用简单,上手快目录级权限控制,企业安全必备子目录Checkout,减少不必要的文件检出主要应用场景开发人员用来做代码的版本管理工具。

SVN客户端的安装与使用----第一章

babyxuqian的博客

04-20

1985

svn概述

1.什么是svn

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

SVN服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。

SVN存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)

SVN安装教程详解:快速掌握SVN的安装和使用方法

qq_28245087的博客

05-27

4299

本文为大家介绍了SVN的详细安装步骤,并提供了具体的命令行操作和TortoiseSVN的图形用户界面操作说明,帮助读者轻松掌握SVN的安装和使用方法。包括创建版本库,添加项目文件到版本库,创建工作副本,对文件进行修改和提交,取回更新,处理冲突等操作。SVN工作副本是您本地保存项目文件的副本。其中,project_name是您要添加的项目名称。

SVN各图标状态介绍

u010865136的专栏

11-06

913

如下图:

 

注意事项:

   .svn这个隐藏目录记录着两项关键信息:工作文件的基准版本和一个本地副本最后更新的时间戳,千万不要手动修改或者删除这个.svn隐藏目录和里面的文件!!,否则将会导致你本地的工作拷贝(静态试图)被破坏,无法再进行操作。

  1)    TortoiseSVN图标介绍

    

   一个新检出的工作复本使用绿色的对勾重载,表示Subversion状态正常。

windows环境下的svn客户端(VisualSVN Server),服务端(TortoiseSVN),中文化(TortoiseSVN LanguagePack_1.9.7.2)安装和使用(超详细)

Hui_Hong_TaiLang的博客

06-13

1万+

可以选第一个选项新建,也可以通过 “新建”栏 新建一个库右键单击新建的 TEST 库 --> 新建 —> Floder 新建目录。

SVN安装及使用教程图文详解

热门推荐

Ruishine的博客

12-01

15万+

https://blog.csdn.net/zhanghuaishu0/article/details/78487628

https://mp.weixin.qq.com/s?src=11×tamp=1637550071&ver=3451&signature=Cj7iFBsDeGQEIKG41PJaXnaG*DADPQ73gmF7fHloS21UIwjxc8AE3pgjids10YxBJAK5ybpU5v7xjyjqtMrA7JhZBtSj3MXhKnJMxiX04-bHo

SVN的安装与使用

m0_51976564的博客

10-20

1万+

SVN的下载、安装与使用,以及常见报错

SVN 安装参考步骤

...

11-01

7593

SVN 安装参考步骤

CentOS6.9下svn快速安装配置方法

01-20

本文实例为大家分享了CentOS6.9快速安装配置svn的具体代码,供大家参考,具体内容如下 环境介绍: 操作系统:CentOS release 6.9 (Final) 192.168.65.130 (svn服务器) 192.168.65.129 (svn客户端) 一、svn安装检查...

linux下svn安装及使用

01-07

本文主要讲解centos6.9版本下的svn的安装与使用! # 使用yum安装 1检查已安装版本:rpm -qa subversion 2卸载旧版本SVN:yum remove subversion 3 yum安装svn: yum install subversion Complete,表示安装完成。 # ...

SVN详细配置与使用 ——一步步教会您使用

weixin_33840661的博客

01-20

1827

  项目管理在项目开发活动中起到非常重要的作用,而对于初学者来说学习有一定的难度,且不说如何使用,就是搭建过程恐怕也要费一般周折,介于此下面就通过图解的方式一步一步详细的教大家如何使用SVN,你只要耐心的一步步去实践就能掌握

目录:

一、SVN介绍

二、SVN服务器安装

三、SVN客户端安装

四、SVN服务配置

五、SVN客户使用

六、Eclipse SVN客户端插件安装

...

SVN使用详解(三)—— 客户端TortoiseSVN的常用操作及常见问题解决

最新发布

weixin_40130409的博客

10-24

7746

svn的操作详细介绍,及问题解决

超简单的SVN快速入门

学哥斌的博客

03-16

1568

文章目录1、SVN介绍1.1 SVN基本概念1.2 SVN架构2、SVN安装与使用2.1 下载2.2 安装2.2.1 服务端VisualSVN的安装2.2.2 客户端TortoiseSVN的安装2.3 使用2.3.1 VisualSVN创建仓库目录2.3.2 VisualSVN创建用户和组2.3.3 VisualSVN权限控制2.3.4 TortoiseSVN常用操作2.3.4.1 浏览仓库2.3...

SVN客户端(Windows)——Tortoise SVN(中文版 )的下载及安装

m0_47613744的博客

06-09

7万+

主要介绍 Tortoise SVN 的下载、安装及如何设置为中文。

SVN客户端安装及使用说明

时代各有不同,青春一脉相承。

10-10

6792

TortoiseSVN是SVN客户端,通过TortoiseSVN可以很轻松的管理版本服务器上的项目或者文档之类。在官网(https://tortoisesvn.net/downloads.html)进行下载安装包,其中也包括了中文语言包(语言安装包页面下方),自己根据电脑的版本下载需要的版本软件就可。

SVN客户端(TortoiseSVN)安装及使用说明

一恍过去

03-30

2万+

SVN客户端(TortoiseSVN)安装及使用说明

idea中Java Web项目的访问路径问题

WinstonLau的博客

05-08

7万+

说明

这里只以 servlet 为例,没有涉及到框架,但其实路径的基本原理和框架的关系不大,所以学了框架的同学如果对路径有疑惑的也可以阅读此文

项目结构

在 idea 中新建一个 Java Web 项目,项目的初始结构如下 ( 不同版本的 idea 可能略有区别 ) :

默认访问路径**

- 当我们将项目的基本配置设置好后,启动 Tomcat,会发现直接出现的是 index.jsp 页面,此时浏览

vscode配置svn及使用

10-20

在VS Code中配置SVN需要安装SVN插件,安装方法如下:

1. 打开VS Code,点击左侧的扩展图标(四个方块组成的图标);

2. 在搜索框中输入“svn”,选择“VisualSVN”插件并安装;

3. 安装完成后,点击左下角的“设置”图标,选择“用户设置”;

4. 在搜索框中输入“svn.path”,找到“SVN: Executable Path”选项;

5. 在该选项中输入SVN的可执行文件路径,例如:"svn.path": "C:\\d\\software\\dev\\TortoiseSVN\\bin\\svn.exe";

6. 配置完成后,可以在VS Code的左侧菜单栏中找到SVN相关的操作,例如提交、更新等。

使用SVN插件进行版本控制的步骤如下:

1. 在VS Code中打开需要进行版本控制的文件夹或项目;

2. 点击左侧菜单栏中的SVN图标,选择“初始化仓库”;

3. 在弹出的窗口中输入仓库的URL和本地路径,点击“确定”;

4. 在左侧菜单栏中选择需要进行版本控制的文件或文件夹,右键点击选择“提交”;

5. 在弹出的窗口中输入提交信息,点击“确定”;

6. 可以在左侧菜单栏中选择“更新”来更新本地代码。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

WinstonLau

CSDN认证博客专家

CSDN认证企业博客

码龄6年

暂无认证

201

原创

2万+

周排名

138万+

总排名

119万+

访问

等级

1万+

积分

204

粉丝

895

获赞

212

评论

2318

收藏

私信

关注

热门文章

checkbox(复选框)和radio(单选按钮)的区别与详解

97786

idea中Java Web项目的访问路径问题

72077

SVN下载、安装、配置及使用方法

58663

input标签的value属性详解

55020

5.7及以上版本的MySQL下载、安装及配置教程

33785

分类专栏

JSON

1篇

框架

3篇

MyBatis

1篇

Spring MVC

2篇

Spring

3篇

Spring Boot

1篇

Java

27篇

多线程

1篇

数据结构与算法

1篇

数据结构

4篇

算法

8篇

软件与系统

1篇

软件

71篇

系统

30篇

数据库

11篇

Linux

4篇

设计模式

2篇

面试

2篇

网络

4篇

前端

59篇

其它

3篇

英语

1篇

最新评论

input标签的value属性详解

m0_54485107:

写的非常棒,非常感谢主播的分享

Mac系统中JDK的下载安装、配置和更新

CSDN-Ada助手:

什么是 Java 中的 JDBC?如何连接数据库并进行操作?

如何理解js中基本数据类型的值不可变

qq_34826468:

扯半天 啥都没说明白

SVN下载、安装、配置及使用方法

于AS占:

太详细了,连图标都给单独解释了。 收藏!

SVN下载、安装、配置及使用方法

Dany_Thodms:

SVN服务端配置:“将其更改为 anon-access = write ,然后保存”中anon-ancess前面缺少了个#号。

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

idea maven本地仓库有jar包,还是报无法解析的错误

Mac系统编译Spring源码

把null放在右边真的能避免空指针吗

2021年9篇

2020年13篇

2019年155篇

2018年42篇

2017年1篇

目录

目录

分类专栏

JSON

1篇

框架

3篇

MyBatis

1篇

Spring MVC

2篇

Spring

3篇

Spring Boot

1篇

Java

27篇

多线程

1篇

数据结构与算法

1篇

数据结构

4篇

算法

8篇

软件与系统

1篇

软件

71篇

系统

30篇

数据库

11篇

Linux

4篇

设计模式

2篇

面试

2篇

网络

4篇

前端

59篇

其它

3篇

英语

1篇

目录

评论 5

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

SVN 教程 | 菜鸟教程

SVN 教程 | 菜鸟教程

菜鸟教程 -- 学的不仅是技术,更是梦想!

首页

HTML

CSS

JavaScript

Vue

Bootstrap

NodeJS

Python3

Python2

Java

C

C++

C#

Go

SQL

Linux

jQuery

本地书签

首页

HTML

CSS

JS

本地书签

Search

Python3 教程

Python2 教程

Vue3 教程

vue2 教程

Bootstrap3 教程

Bootstrap4 教程

Bootstrap5 教程

Bootstrap2 教程

SVN 教程

SVN 教程

SVN 简介

SVN 安装

SVN 生命周期

SVN 启动模式

SVN 创建版本库

SVN 检出操作

SVN 解决冲突

SVN 提交操作

SVN 版本回退

SVN 查看历史信息

SVN 分支

SVN 标签

TortoiseSVN 使用教程

SVN 简介

SVN 教程

Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。

SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。

谁适合阅读本教程?

本教程是让对有版本控制需求且对 SVN 感兴趣的软件开发人员学习 SVN 的基本知识,通过本教程你可以一步一步了解 SVN 的使用。

阅读本教程前,您需要了解的知识

在你继续本教程之前,你必须对简单的术语有一定的了解,比如源码,文档等等。如果你有软件开发或软件测试的工作经历是最好的。

Subversion 使用情况

虽然在 2006年 时 Subversion 的使用族群仍然远少于传统的 CVS,但已经有许多开放源码团体决定将 CVS 转换为 Subversion。已经转换使用 Subversion 的包括了 FreeBSD、Apache Software Foundation、KDE、GNOME、GCC、Python、Samba、Mono 以及许多团体。有许多的团队换用 Subversion 是因为 Trac 所提供的专案管理环境。除此之外,一些自由软件开发的协作网如SourceForge除了提供 CVS 外,现在也提供专案开发者使用 Subversion 作为源码管理系统, JavaForge、Google Code以及 BountySource 则以 Subversion 作为官方的源码管理系统。

相关链接

SVN 官网:https://subversion.apache.org/

Github SVN 源码:https://github.com/apache/subversion

SVN 简介

点我分享笔记

取消

分享笔记

昵称昵称 (必填)

邮箱邮箱 (必填)

引用地址引用地址

分类导航

HTML / CSSHTML 教程HTML5 教程CSS 教程CSS3 教程Bootstrap3 教程Bootstrap4 教程Bootstrap5 教程Font Awesome 教程Foundation 教程 JavaScriptJavaScript 教程HTML DOM 教程jQuery 教程AngularJS 教程AngularJS2 教程Vue.js 教程Vue3 教程React 教程TypeScript 教程jQuery UI 教程jQuery EasyUI 教程Node.js 教程AJAX 教程JSON 教程Echarts 教程Chart.js 教程Highcharts 教程Google 地图 教程 服务端Python 教程Python2.x 教程Linux 教程Docker 教程Ruby 教程Java 教程C 教程C++ 教程Perl 教程Servlet 教程JSP 教程Lua 教程Rust 教程Scala 教程Go 教程PHP 教程数据结构与算法Django 教程FastAPI 教程Zookeeper 教程设计模式正则表达式Maven 教程Verilog 教程ASP 教程AppML 教程VBScript 教程 数据库SQL 教程MySQL 教程PostgreSQL 教程SQLite 教程MongoDB 教程Redis 教程Memcached 教程 数据分析Python 教程NumPy 教程Pandas 教程Matplotlib 教程Scipy 教程R 教程Julia 教程 移动端Android 教程Swift 教程jQuery Mobile 教程ionic 教程Kotlin 教程 XML 教程XML 教程DTD 教程XML DOM 教程XSLT 教程XPath 教程XQuery 教程XLink 教程XPointer 教程XML Schema 教程XSL-FO 教程SVG 教程 ASP.NETASP.NET 教程C# 教程Web Pages 教程Razor 教程MVC 教程Web Forms 教程 Web ServiceWeb Service 教程WSDL 教程SOAP 教程RSS 教程RDF 教程 开发工具Eclipse 教程Git 教程Svn 教程Markdown 教程 网站建设HTTP 教程网站建设指南浏览器信息网站主机教程TCP/IP 教程W3C 教程网站品质

Advertisement

反馈/建议

在线实例

·HTML 实例

·CSS 实例

·JavaScript 实例

·Ajax 实例

·jQuery 实例

·XML 实例

·Java 实例

字符集&工具

· HTML 字符集设置

· HTML ASCII 字符集

· JS 混淆/加密

· PNG/JPEG 图片压缩

· HTML 拾色器

· JSON 格式化工具

· 随机数生成器

最新更新

·

Rust 宏

·

Seaborn 教程

·

Pandas 相关性分析

·

31.2k star, 免...

·

Dev Home —...

·

免费开源的 AI ...

·

11.2k star, 免...

站点信息

·

意见反馈

·

免责声明

·

关于我们

·

文章归档

关注微信

Copyright © 2013-2024 菜鸟教程 

runoob.com All Rights Reserved. 备案号:闽ICP备15012807号-1

微信关注

Download | VisualSVN for Visual Studio

Download | VisualSVN for Visual Studio

VisualSVN

Products

Downloads

Company

Support

VisualSVN for Visual Studio

Overview

Features

Pricing

Getting started

Version history

Download

Download

Select the appropriate version of VisualSVN for Visual Studio.

VisualSVN for Visual Studio 2022

VisualSVN 8.3 supports Visual Studio 2022 only. It can be installed

side-by-side with other VisualSVN versions.

Compiled with Apache Subversion 1.14.3.

Supports all editions of Visual Studio (x64 and ARM64).

VisualSVN 8.3.2

Size: 9.7 MB

Date: January 22, 2024

Release Notes

VisualSVN for Visual Studio 2019

VisualSVN 7.4 supports Visual Studio 2019 only. It can be installed

side-by-side with other VisualSVN versions.

Compiled with Apache Subversion 1.14.3.

Supports all editions of Visual Studio.

VisualSVN 7.4.2

Size: 5.1 MB

Date: January 22, 2024

Release Notes

VisualSVN for Visual Studio 2017

VisualSVN 6.8 supports Visual Studio 2017 only. It can be installed side-by-side

with other VisualSVN versions.

Compiled with Apache Subversion 1.14.3.

Supports all editions of Visual Studio.

VisualSVN 6.8.2

Size: 5.2 MB

Date: January 22, 2024

Release Notes

VisualSVN for Visual Studio 2015 and older

VisualSVN 5.7 supports Visual Studio 2015, 2013, 2012, 2010, 2008 and 2005.

It can be installed side-by-side with other VisualSVN versions.

Compiled with Apache Subversion 1.14.3.

Supports all editions of Visual Studio (except the Express editions).

VisualSVN 5.7.2

Size: 6 MB

Date: January 22, 2024

Release Notes

Prerequisite Software: TortoiseSVN

In order to setup VisualSVN, you need to download and install the

latest stable version of TortoiseSVN Subversion client.

VisualSVN is compatible with 1.8.x, 1.9.x, 1.10.x, 1.11.x, 1.12.x, 1.13.x and 1.14.x

versions of TortoiseSVN (excluding nightly TortoiseSVN builds numbered as 1.14.99.x).

Starting from version 1.14.6, TortoiseSVN requires Windows 10 or later.

TortoiseSVN 1.14.6 (32-bit)

TortoiseSVN 1.14.6 (64-bit)

TortoiseSVN 1.14.6 (ARM64)

Terms of service

Privacy policy

Copyright © 2005-2024 VisualSVN Software Ltd.

All rights reserved.

VSN游戏饰品道具交易平台,跨平台无CD最方便

VSN游戏饰品道具交易平台,跨平台无CD最方便

<%= webpackConfig.name %>

【DCS World】社区模组 VSN F-4 V2.8.1.01_单机游戏热门视频

【DCS World】社区模组 VSN F-4 V2.8.1.01_单机游戏热门视频 首页番剧直播游戏中心会员购漫画赛事投稿【DCS World】社区模组 VSN F-4 V2.8.1.01

1570

2

2023-01-24 14:15:27

2633515https://www.youtube.com/watch?v=OqGt5O9YSF4

转自:Spino's Simulations

Free Standalone F-4 Phantom Mod with Custom RADAR! DCS World游戏单机游戏DCS飞行模拟飞机战斗机模组F4数字战斗模拟鬼怪DCS WorldPhantom

恐高的菜鸡

发消息

关注 1632

拒绝无用留学,提高留学生专业成绩!

DCS 新闻 & 航空相关

(127/194)自动连播47.7万播放简介

订阅合集

DCS新闻&航空

DCS OH-6A 割线器

00:10

DCS AH-1G 发动机启动 更新 W.I.P

03:49

DCS AH-1G 发动机启动 WIP

01:23

DCS Su-47 预告片

01:48

Standby | DCS C-130J

00:06

DCS 座舱按键触发器设置教程

05:04

DCS MiG-23 MLA RAZBAM

05:36

DCS OH-6A 预告片

01:06

DCS SA-342 February 2024 更新展示

03:27

DCS Arctic Thunder 战役 F-16C 冷启动

13:15

DCS 0-400米 直线加速赛

22:20

DCS F-100D 代码开发历程 May 2022 - Feb 2024

03:03

如何快速进入DCS多人服务器

07:44

DCS BO-105 飞行员动画

01:20

真实美军战斗机飞行员狗斗 F-14B VS F/A-18C 空中对决

10:11

真实美军战斗机飞行员狗斗 MiG-29 VS F/A-18C 空中对决

04:37

绷不住了!美军战斗机飞行员观看《阿三版 壮志凌云》预告片反应

08:38

DCS AH-1G 鼠标控制炮塔

00:53

DCS AH-1G 冷启动 W.I.P.

02:31

DCS 社区模组兰开斯特轰炸机一览

06:07

DCS Eagle Squadron 飞行员生涯挑战

03:53

真实美军战斗机飞行员狗斗 Su-27 VS F/A-18C 加长版

19:05

Ground Pounder Simulations 2024 计划

03:22

真实美军战斗机飞行员狗斗 Su-27 VS F/A-18C 空中对决

08:58

DCS AH-1G Cobra 机炮

02:08

DCS 兰开斯特轰炸机开发进度 2023

11:30

Wags 解读 DCS World 2024 and Beyond

2:33:44

DCS Campaigns 2024 and Beyond

04:47

真实 F-15E 战斗机飞行员 航展表演教学 Part 3

16:15

真实 F-15E 战斗机飞行员 航展表演教学 Part 2

15:35

真实 F-15E 战斗机飞行员 航展表演展示 Part 1

12:43

DCS 新 Su-30SM Flanker-H VS F-22 Raptor 空中对决

11:22

DCS Su-30 vs F-16C, FA-18C, Su-27, Mig-29 & M-2000C | 矢量发动机

29:37

DCS SA-342: The Gazelle

01:30

DCS OH-58D Kiowa Warrior 切换步枪!

01:09

DCS AH-1G Cobra 新模型

04:47

DCS P-51D Mustang 战役 - Debden Eagles

04:15

战场实时控制软件 Olympus 发布

01:46

VIAF 2023 ED CEO Nick Grey 采访

38:14

VIAF 2023 Heatblur 采访

53:28

战场实时控制软件 Olympus 演示

2:08:24

霹雳-17 有多强?AWACS 杀手?

20:36

DCS 战场实时控制软件 Olympus

07:36

DCS F-16C 战役 Last Out - Weasels Over Syria II 预告片

01:38

DCS 战役中可跳过空中加油

02:58

DCS 最真实的二战战役?Debden Eagles

04:00

DCS 2.9 画面优化指南

08:39

DCS P-51D 战役 - Debden Eagles 预告片

01:26

重现哈沙姆之战 | the Gamblers 战役

01:19

DCS AH-1G 旋翼气流效果

04:31

F-14 飞行员 "Heater" 需要大家帮助

03:01

新模组 F-22A Block 30?小心抄袭者!

07:55

DCS 应用 DLAA 效果

00:21

我是谁?Reflected Simulations 介绍

08:32

DCS MB-339 Gun Camera Demo

03:03

真实海军航空站指挥官讲述,RIO 过渡到 WSO 细节,单双座超级虫有何不同

14:16

世界第一架民用 F-16 狗斗

17:54

增加 DCS 战役沉浸感,Baltic Dragon 战役新功能

06:09

the Gamblers F-16C 战役 | Baltic Dragon

02:36

DCS 6代机 VS 5代机

30:00

DCS Mirage F1BE 预告片

01:11

战斧巡航导弹打击敌方空军基地 | DCS F-16C 战役

00:48

社区模组 F-15EX 先进鹰 V1.7

02:11

深入解读 DCS F-16C 战役 First In - Weasels Over Syria

08:04

DCS 缩短战役任务耗时

03:56

DCS 战役未来 | Baltic Dragon & Reflected 回复玩家反馈

10:36

F-16C 战役 First In - Weasels Over Syria 预告片

02:55

DCS F-4E 接近发售?ED还再搞地图?越南地图 & 朝鲜半岛地图?全球地图?

12:51

DCS F-15E WSO 操纵杆 制作教程

31:58

DCS F-15E WSO 操纵杆 3D打印 DIY

03:51

DCS 西奈地图 靶眼修复方法

05:53

DCS 新地面装备包 | Currenthill MilSim

31:04

DCS MiG-17F 开发人员独家专访

24:22

我为什么决定不发布新的合作任务

06:34

全新 DCS P-51 战役 - Debden Eagles

07:38

美国空军 F-15E 打击鹰介绍

11:04

DCS C-130J 飞行展示

00:19

沙漠风暴行动 F-15E 飞毛腿杀手

06:37

DCS 社区模组 F-15EX V1.7 预告片

02:14

DCS F-16C 新战役预览 | First In - Weasels over Syria

12:23

坚定决心行动 DCS F-15E 任务预告片

03:27

DCS F-15E的两根加油管?

00:13

DCS F-15E VS F-22 空中对决

14:37

DCS F-15E VS Su-57 空中对决

11:48

“乌鸦一号” 主宰者狂怒战役 一周年纪念

06:21

真实 F-15E 飞行员再次体验 DCS F-15E

06:29

DCS F-15E 前座舱布局

09:09

DCS Su-22 展示 | OctopusG

06:16

受害者又来了!DCS F-15E 一挑三!

09:16

重现历史 DCS F-15E 轰炸飞行中的Mi-24

04:57

DCS F-15E 还原真实挂载

16:53

真实雷鸟飞行员狗斗教学 F-16 VS Su-27

10:58

真实雷鸟飞行员分享 F-16 应对 俄罗斯战机 狗斗技巧

07:29

DCS F-15E 打击鹰低空游览西奈半岛

10:36

真实 F-15E 飞行员体验 DCS F-15E

25:05

DCS F-15E 你需要了解这些

10:33

DCS F-15E VS F-14B 空中对决

14:40

DCS F-15E 打击鹰升空展示

03:16

DCS F-15E 空对地雷达展示

15:44

打击鹰来了?DCS F-15E 冷启动 垂直爬升

16:37

DCS F-15E 打击鹰 冷启动

05:33

童年最爱的战斗机重生 | DCS F-15E

04:10

DCS F-15E VS F-15C 空中对决

20:32

DCS F-15E 打击鹰 对空 对地攻击展示 | LongShot

13:12

DCS F-15E 打击鹰一览 | Grim Reapers

45:15

DCS F-15E 打击鹰体验 | TheDevildogGamer

00:45

DCS F-15E VS MiG-29 空中对决

09:57

DCS 铁穹系统测试 | Grim Reapers

41:42

DCS 铁穹系统

01:16

DCS F-16 战役 Wild Weasels! First In - Weasels Over Syria

09:10

菲律宾海海战重现?尼米兹级航母单挑二战日本海军

1:18:45

海军少将 F-14 飞行员教你在 DCS 中狗斗

29:27

法国又投降了?四常 VS 二战日本联合舰队

49:58

DCS 诺曼底2 地图一览 | Growling Sidewinder

07:02

DCS 诺曼底2 地图一览 | Grim Reapers

1:11:37

DCS 西奈地图一览 | 历史 地理 | Grim Reapers

1:07:27

DCS 西奈地图一览 | HIP Games

10:03

DCS 西奈地图一览 | 历史 | Spudknocker

16:13

苏伊士运河 | DCS 西奈地图一览 | Spudknocker

06:34

DCS J-20 VS F-16C 空战对决

13:30

DCS F-14 雄猫战役三部曲

05:26

超级大黄蜂伙伴加油机 V1.3

06:53

超级大黄蜂伙伴加油机 V1.1

04:53

DCS 多线程对比测试

03:43

DCS 多线程到来,大型任务可能性

07:22

DCS F-14 战役 Speed & Angels with Paco Chierici

02:49

社区模组 VSN F-4 V2.8.1.01

11:12

DCS F-16C 战役 the Gamblers 短片

00:56

DCS F-14 战役 Speed & Angels 评分系统

05:43

社区模组 F-15EX 先进鹰 V1.6

05:43

DCS F-14 战役 Speed & Angels 内容介绍

12:03

DCS C-130 相关问题 | 2022.12.28

1:49:22

Reflected Simulations 2023 新战役

06:29

导弹卡车?社区模组 F-15EX V1.5

11:19

DCS AH-1G 休伊眼镜蛇 W.I.P

05:37

DCS F-15E 对地雷达 HRM Part 3

07:22

DCS F-15E 座舱一览 Part 2

12:35

DCS F-15E 介绍 Part 1

05:54

真实F-14飞行员玩 DCS F-14

19:45

DCS F-22 VS J-20 空战对决

15:46

F-14B 新战役 Speed & Angels 试玩 | 同名纪录片改编

1:41:16

DCS ADFX-01 VS F-22 狗斗

13:20

DCS ADFX-01 社区模组发布 - 庆祝1000订阅

06:54

F-14B 战役 Speed & Angels 相关问题

11:15

SATAL 2023 Survivor Series

01:11

J-20 VS F-22 五代机对决

55:39

UFO机动?欧洲台风 VS Su-57 狗斗

10:59

DCS AI 狗斗能力大幅提升

13:45

DCS 欧洲台风 VS F-22 狗斗

12:11

DCS 战役10个常见问题

12:52

F-14B 新战役 Speed & Angels

03:16

F-16I & F-16D V2.0 发布 | IDF Mods Project

01:54

F/A-18C 科拉半岛战役预告片

01:08

Maverick 的做法可行吗?F-14 狗斗

11:19

DCS C-130J 预告 | ASC

00:34

DCS F-14 vs Su-57 狗斗

10:35

DCS 科拉半岛地图新战役

05:14

DCS Cinematic | I Ain't Worried

02:46

DCS 幻影 F-1CE VS MiG-21 鱼窝

09:06

战术空射诱饵弹试验 | AGM-141 TALD

07:51

“乌鸦一号” 小说作者 Kevin Miller 采访

56:23

DCS 未来模组 | ED 开发人员采访

1:05:50

"乌鸦一号" 主宰者狂怒战役预告片

03:34

神仙打架?DCS Su-57 VS F-22 五代机狗斗

14:26

Maverick来了也不行?Su-57 vs F/A-18E 超级大黄蜂

09:28

"乌鸦一号" 战役续作任务01试玩

46:49

"乌鸦一号" 战役续作任务试玩

1:32:56

"乌鸦一号" 战役续作预告片

00:22

"乌鸦一号"战役续作 Dominant Fury Campaign

01:00

空战模拟播客

Heatblur F-4E with CEO Nicholas Dackard #43

1:11:41

DCS 战场实时控制软件 Olympus #42

1:03:03

DCS 虚拟飞行中队 #42

1:19:22

油门杆讨论 #41

56:40

DCS F-15E with Steve Davies and Metal2Mesh #39

2:28:07

DCS 多线程和狂风战斗机 #38

1:25:24

DCS Speed & Angels战役 #37

1:43:38

DCS F-15E with Razbam & The Unbound System #36

47:48

F-4战斗机?Heatblur Simulations采访 #33

1:17:36

DCS “乌鸦一号” 战役续作采访 #30

55:38

网页任务编辑器

DCS World 网页任务编辑器 新预览

05:30

飞机影子隐藏 | DCS 网页任务查看器

00:03

群组名称显示 | DCS 网页任务查看器

00:08

任务快速生成插件 | DCS 网页任务编辑器

00:35

复制航路 | DCS 网页任务编辑器

00:25

添加标签 | DCS 网页任务查看器

00:34

DCS 网页任务编辑器 V0.3.20 使用介绍

08:00

批量设置单位 | DCS 网页任务编辑器

00:49

DCS 网页任务编辑器 V0.2.4 - ALPHA

07:57

单位放置 | DCS网页任务编辑器

01:42

单位复制 单位列表过滤 | DCS网页任务编辑器

02:21

单位复制 | DCS 网页任务编辑器

00:42

单位列表 | DCS 网页任务编辑器

01:07

DCS 网页任务查看器 V0.4.2 - BETA

06:51

DCS 网页任务编辑器预览

02:37

【DCS World】指挥官报到?战场实时控制软件 Olympus恐高的菜鸡

2959

0

【DCS World】ADFX-01 VS F-22 狗斗恐高的菜鸡

9308

30

【DCS World】社区模组 F-15EX 先进鹰 V1.7 预告片恐高的菜鸡

2034

1

DCS FC3更新后画面效果对比干梨019

5575

1

【DCS World】the Gamblers F-16C 战役 | Baltic Dragon恐高的菜鸡

921

0

【DCS World】F-15E 地形跟踪雷达 WIP - 迪拜哈利法塔 | 2023.8.19恐高的菜鸡

1300

0

【DCS World】UFO机动?欧洲台风 VS Su-57 狗斗恐高的菜鸡

3185

7

【DCS World】如何快速进入多人服务器恐高的菜鸡

936

0

【DCS World】F-15E TFR 地形跟踪雷达教程恐高的菜鸡

1101

0

【DCS World】缩短战役任务耗时恐高的菜鸡

706

0

【DCS World】F-15E 火警警告音效恐高的菜鸡

1963

0

【DCS World】真实 F-15E 打击鹰飞行员体验 DCS F-15E恐高的菜鸡

8922

13

【DCS World】F-15E 打击鹰 VS F-14B 雄猫 空中对决恐高的菜鸡

2744

3

【DCS World】F-15E 过载警告音效恐高的菜鸡

1808

0

【DCS World】Su-22 展示 | OctopusG恐高的菜鸡

1935

0

【DCS World】MB-339 Gun Camera Demo恐高的菜鸡

747

0

【DCS World】F-15E Overhead Break Landing | 真实 WSO 教学恐高的菜鸡

907

0

【Metal2Mesh】DCS F-15E 透明操纵杆恐高的菜鸡

1946

0

【DCS World】F-16C 战役 Last Out - Weasels Over Syria II 预告片恐高的菜鸡

1147

0

【DCS World】F-15E JDAM WPN/CC 模式教程恐高的菜鸡

1385

2

展开

小窗

客服

顶部

赛事库 课堂 2021

什么是 Visual Studio 的 VisualSVN? - 知乎

什么是 Visual Studio 的 VisualSVN? - 知乎切换模式写文章登录/注册什么是 Visual Studio 的 VisualSVN?SEO狼术  什么是 Visual Studio 的 VisualSVN?  VisualSVN 是 Visual Studio 的专业层 Subversion 集成插件。  VisualSVN 是一个 Visual Studio 插件,它使用 Visual Studio 无缝整合了 Subversion (SVN) 和 TortoiseSVN。VisualSVN 虚拟地消除了在 Subversion 中管理您的项目源代码文档。使用 VisualSVN 作为保护源代码的无声合作伙伴来编程、设计、调试和部署。  鼓励使用所有常规 Visual Studio 变体,例如 Visual Studio Community。但是不支持多个版本的 Visual Studio Express。  在您的开发公司期间部署 VisualSVN 后,您的所有程序员都将专业高效地使用 Subversion 来处理和保护您的业务工作产品。  VisualSVN for Visual Studio 强大的功能:  无与伦比的可靠性: Visual Studio 永远不会因为 VisualSVN 而崩溃或挂起。  无缝集成: VisualSVN 自动管理重命名或添加的文档,并将这些手术反映到 Subversion。  实时站立: VisualSVN 密切监视并显示所有最近对工作副本所做的更改。  学习曲线短: VisualSVN 使用 TortoiseSVN 对话框并提供一个聪明的魔术师将您的资源置于 Subversion 下。发布于 2021-06-20 17:06Microsoft Visual Studio 2019SVN(Subversion)TortoiseSVN​赞同​​添加评论​分享​喜欢​收藏​申请

SVN中文网 - svn安装、svn部署、svn操作手册、visualsvn

SVN中文网 - svn安装、svn部署、svn操作手册、visualsvn

Skip to content

SVN中文网

经验分享

客户端经验分享

服务器端经验分享

服务器端手册

客户端手册

命令参考

Visualsvn使用说明

下载

QQ群:296711778

免费的企业级版本管理软件

开源免费软件

免费开源的工具软件,商业企业无需付费

稳定成熟

国际上最著名的版本管理工具,没有之一,选择svn一定不会错

强大的全新控制

基于角色的权限控制,适合企业使用

扩展技术支持

市场广泛

程序员基本都会使用,企业使用的成本低

省心放心

拿来即用,国际上大部分的企业公司都在使用

功能强大

经过多年的发展,svn系统功能已经非常强大和稳定

技术支持

国际国内均存在免费和付费的技术支持,无后顾之忧

SVN相关文章

如何使用virsualSVN创建版本库 打开virsualbox: 第一步,右键Repositories 点击定制权限: 输入用户名:redmine, […]

VisualSVN Server的配置和使用方法【服务器端】 一、VisualSVN Server的配置和使用方法【服务器端】 安装好VisualSVN Server后【安 […]

smartsvn对于OS X,Windows和Linux世界上最流行的Subversion客户端 http://www.smartsvn.com/ This website needs to set cook […]

WebSVN – Online subversion repository browser http://www.websvn.info/ 为什么WebSVN? WebSVN提供了一个欣赏到这就是被设计 […]

windows上安装apache2.0.59+SVN+自动邮件通知(完整版) 前几天写了linux版的,受广大论友的邀请,特写此windows的版本,希望大家能够共同为此论坛作出贡献,也希 […]

linux(CentOS4) 环境apache+svn完全配置(实际配置日记) 一、使用前的心得 配置前,要知道自己要做什么,因为很多人是新接触svn的,对其不是很了解,甚至有同学问我,sv […]

svn安装与其服务器搭建 SVN为程序开发团队常用的代码管理,版本控制软件;下面我们来介绍TortoiseSVN的安装,和其服务器的搭建 […]

Linux下SVN安装配置 第一章 安装 1. 采用源文件编译安装。源文件共两个,为: subversion-1.6.1.tar.gz ( […]

SVN服务器搭建和使用(一VisualSVN ) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服 […]

查看所有文章

kettle.org.cn 提供技术支持

Introduction to vsn

Introduction to vsn

Introduction to vsn

Wolfgang Huber

24 October 2023

Package

vsn 3.70.0

Contents

1 Getting started

2 Running VSN on data from a single two-colour array

3 Running VSN on data from multiple arrays (“single colour normalisation”)

4 Running VSN on Affymetrix genechip data

5 Running VSN on RGList objects

5.1 Background subtraction

5.2 Print-tip groups

6 Missing values

7 Normalisation with ‘spike-in’ probes

8 Normalisation against an existing reference dataset

9 The calibration parameters

9.1 The calibration parameters and the additive-multiplicative error model

9.2 More on calibration

10 Variance stabilisation without calibration

11 Assessing the performance of VSN

12 VSN, shrinkage and background correction

13 Quality assessment

13.1 Stratifying factors such as print-tip, PCR plate, reporter-sequence

13.2 Most genes unchanged assumption

14 Acknowledgements

Session info

References

1 Getting started

VSN is a method to preprocess microarray intensity data. This can be as simple as

library("vsn")

data("kidney")

xnorm = justvsn(kidney)

where kidney is an ExpressionSet object with unnormalised data and xnorm the resulting ExpressionSet with calibrated and glog\(_2\)-transformed data.

M = exprs(xnorm)[,1] - exprs(xnorm)[,2]

produces the vector of generalised log-ratios between the

data in the first and second column.

VSN is a model-based method, and the more explicit way of

doing the above is

fit = vsn2(kidney)

ynorm = predict(fit, kidney)

where fit is an object of class vsn that contains

the fitted calibration and transformation parameters, and the method

predict applies the fit to the data.

The two-step protocol is useful when you want to fit the parameters on a

subset of the data, e.g. a set of control or spike-in features,

and then apply the model to the complete set of data

(see Section 7 for details). Furthermore, it

allows further inspection of the fit object, e.g. for the

purpose of quality assessment.

Besides ExpressionSets, there are also justvsn

methods for AffyBatch objects from the affy package and

RGList objects from the limma package. They are described

in this vignette.

The so-called glog\(_2\) (short for generalised logarithm)

is a function that is like the logarithm (base 2) for large values

(large compared to the amplitude of the background noise),

but is less steep for smaller values. Differences between the transformed

values are the generalised log-ratios. These are

shrinkage estimators of the logarithm of the fold change.

The usual log-ratio is another example for an estimator111 In statistics,

the term estimator is used to denote an algorithm

that calculates a value from measured data.

This value is intended to correspond to the true value of a parameter of the

underlying process that generated the data. Depending on the amount of the

available data and the quality of the estimator, the intention

may be more or less satisfied. of log fold change.

There is also a close relationship between background correction of

the intensities and the variance properties of the different estimators. Please

see Section 12 for more explanation of these issues.

How does VSN work? There are two components: First, an affine

transformation whose aim is to calibrate systematic experimental

factors such as labelling efficiency or detector sensitivity. Second,

a glog\(_2\) transformation whose aim is variance stabilisation.

An affine transformation is simply a shifting and scaling of

the data, i.e. a mapping of the form \(x\mapsto (x-a)/s\) with offset

\(a\) and scaling factor \(s\). By default, a different offset and a

different scaling factor are used for each column, but the same for

all rows within a column. There are two parameters of the function

vsn2 to control this behaviour: With the parameter

strata, you can ask vsn2 to choose different

offset and scaling factors for different groups (“strata”) of

rows. These strata could, for example, correspond to sectors on the

array222 See Section 5.2.. With the parameter

calib, you can ask vsn2 to choose the same

offset and scaling factor throughout333 See

Section 10.. This can be useful, for example, if the

calibration has already been done by other means, e.g., quantile

normalisation.

Note that VSN’s variance stabilisation only addresses the

dependence of the variance on the mean intensity. There may be other

factors influencing the variance, such as gene-inherent properties or

changes of the tightness of transcriptional control in different

conditions. These need to be addressed by other methods.

2 Running VSN on data from a single two-colour array

The dataset kidney contains example data from a spotted cDNA

two-colour microarray on which cDNA from two adjacent tissue samples

of the same kidney were hybridised, one labeled in green (Cy3), one in

red (Cy5). The two columns of the matrix exprs(kidney)

contain the green and red intensities, respectively. A local

background estimate444 See Section 12 for more

on the relationship between background correction and variance

stabilising transformations. was calculated by the image analysis

software and subtracted, hence some of the intensities in

kidney are close to zero or negative. In

Figure 1 you can see the scatterplot of the

calibrated and transformed data. For comparison, the scatterplot of

the log-transformed raw intensities is also shown. The code below involves

some data shuffling to move the data into datasframes for ggplot.

library("ggplot2")

allpositive = (rowSums(exprs(kidney) <= 0) == 0)

df1 = data.frame(log2(exprs(kidney)[allpositive, ]),

type = "raw",

allpositive = TRUE)

df2 = data.frame(exprs(xnorm),

type = "vsn",

allpositive = allpositive)

df = rbind(df1, df2)

names(df)[1:2] = c("x", "y")

ggplot(df, aes(x, y, col = allpositive)) + geom_hex(bins = 40) +

coord_fixed() + facet_grid( ~ type)

Figure 1: Scatterplots of the kidney example data, which were obtained from a two-color cDNA array by quantitating spots and subtracting a local background estimatea) unnormalised and \(\log_2\)-transformed. b) normalised and transformed with VSN. Panel b shows the data from the complete set of 8704 spots on the array, Panel a only the 7806 spots for which both red and green net intensities were greater than 0. Those spots which are missing in Panel a are coloured in orange in Panel b.

To verify the variance stabilisation, there is the function meanSdPlot. For each

feature \(k=1,\ldots,n\) it shows the empirical standard deviation

\(\hat{\sigma}_k\) on the \(y\)-axis versus the rank of the average

\(\hat{\mu}_k\) on the \(x\)-axis.

\[\begin{equation}

\hat{\mu}_k =\frac{1}{d} \sum_{i=1}^d h_{ki}\quad\quad

\hat{\sigma}_k^2=\frac{1}{d-1}\sum_{i=1}^d (h_{ki}-\hat{\mu}_k)^2

\end{equation}\]

meanSdPlot(xnorm, ranks = TRUE)

Figure 2: Standard deviation versus rank of the mean

meanSdPlot(xnorm, ranks = FALSE)

Figure 3: Standard deviation versus mean

The red dots, connected by lines, show the running median of the standard

deviation555 The parameters used were: window width 10%, window

midpoints 5%, 10%, 15%, … . It should be said that the proper

way to do is with quantile regression such as provided by the

quantreg package—what is done here for these plots is

simple, cheap and should usually be good enough due to the abundance

of data.. The aim of these plots is to see whether there is a

systematic trend in the standard deviation of the data as a function

of overall expression. The assumption that underlies the usefulness of

these plots is that most genes are not differentially expressed, so

that the running median is a reasonable estimator of the standard

deviation of feature level data conditional on the mean. After

variance stabilisation, this should be approximately a horizontal

line. It may have some random fluctuations, but should not show an

overall trend. If this is not the case, that usually indicates a data

quality problem, or is a consequence of inadequate prior data

preprocessing. The rank ordering distributes the data evenly along

the \(x\)-axis. A plot in which the \(x\)-axis shows the average

intensities themselves is obtained by calling the plot

command with the argument ranks=FALSE; but this is

less effective in assessing variance and hence is not the default.

The histogram of the generalized log-ratios:

hist(M, breaks = 100, col = "#d95f0e")

Figure 4: Histogram of generalised log-ratios for the kidney example data

3 Running VSN on data from multiple arrays (“single colour normalisation”)

The package includes example data from a series of 8 spotted cDNA arrays

on which cDNA samples from different lymphoma were hybridised together

with a reference cDNA (Alizadeh et al. 2000).

data("lymphoma")

dim(lymphoma)

## Features Samples

## 9216 16

The 16 columns of the lymphoma object contain the red and

green intensities, respectively, from the 8 slides.

pData(lymphoma)

## name sample dye

## lc7b047.reference lc7b047 reference Cy3

## lc7b047.CLL-13 lc7b047 CLL-13 Cy5

## lc7b048.reference lc7b048 reference Cy3

## lc7b048.CLL-13 lc7b048 CLL-13 Cy5

## lc7b069.reference lc7b069 reference Cy3

## lc7b069.CLL-52 lc7b069 CLL-52 Cy5

## lc7b070.reference lc7b070 reference Cy3

## lc7b070.CLL-39 lc7b070 CLL-39 Cy5

## lc7b019.reference lc7b019 reference Cy3

## lc7b019.DLCL-0032 lc7b019 DLCL-0032 Cy5

## lc7b056.reference lc7b056 reference Cy3

## lc7b056.DLCL-0024 lc7b056 DLCL-0024 Cy5

## lc7b057.reference lc7b057 reference Cy3

## lc7b057.DLCL-0029 lc7b057 DLCL-0029 Cy5

## lc7b058.reference lc7b058 reference Cy3

## lc7b058.DLCL-0023 lc7b058 DLCL-0023 Cy5

We can call justvsn on all of them at once:

lym = justvsn(lymphoma)

meanSdPlot(lym)

Figure 5: Standard deviation versus rank of the mean for the lymphoma example data

We see that the variance stabilisation worked. As above, we can obtain the generalised

log-ratios for each slide by subtracting the common reference intensities from those for the 8 samples:

iref = seq(1, 15, by=2)

ismp = seq(2, 16, by=2)

M = exprs(lym)[,ismp]-exprs(lym)[,iref]

A =(exprs(lym)[,ismp]+exprs(lym)[,iref])/2

colnames(M) = lymphoma$sample[ismp]

colnames(A) = colnames(M)

j = "DLCL-0032"

smoothScatter(A[,j], M[,j], main=j, xlab="A", ylab="M", pch=".")

abline(h=0, col="red")

Figure 6: MA-plot for slide DLCL-0032 from the lymphoma example dataA false-colour representation of the data point density is used, in addition the 100 data points in the least dense regions are plotted as dots.

4 Running VSN on Affymetrix genechip data

The package affy provides excellent functionality for

reading and processing Affymetrix genechip data, and you are encouraged

to refer to the documentation of the package affy

for more information about data structures and methodology.

%

The preprocessing of Affymetrix genechip data involves

the following steps:

(i) background correction,

(ii) between-array normalization,

(iii) transformation and (iv) summarisation.

The VSN method addresses steps (i)–(iii).

For the summarisation, I recommend to use the RMA method (Irizarry et al. 2003),

and a simple wrapper that provides all of these is provided through

the method vsnrma.

library("affydata")

data("Dilution")

d_vsn = vsnrma(Dilution)

For comparison, we also run rma.

d_rma = rma(Dilution)

par(mfrow = c(1, 3))

ax = c(2, 16)

plot(exprs(d_vsn)[,c(1,3)], main = "vsn: array 1 vs 3", asp = 1, xlim = ax, ylim = ax, pch = ".")

plot(exprs(d_rma)[,c(1,3)], main = "rma: array 1 vs 3", asp = 1, xlim = ax, ylim = ax, pch = ".")

plot(exprs(d_rma)[,1], exprs(d_vsn)[,1],

xlab = "rma", ylab = "vsn", asp = 1, xlim = ax, ylim = ax, main = "array 1", pch = ".")

abline(a = 0, b =1, col = "#ff0000d0")

Figure 7: Results of vsnrma and rma on the Dilution dataArray 1 was hybridised with 20\(\mu\)g RNA from liver, Array 3 with 10\(\mu\)g of the same RNA.

Both methods control the variance at low intensities, but we see that

VSN does so more strongly. See also Section 12 for further

discussion on the VSN shrinkage.

5 Running VSN on RGList objects

There is a justvsn method for RGList objects.

Usually, you will produce an RGList from your own data using the

read.maimages from the limma package. Here,

for the sake of demonstration, we construct an RGList from

lymphoma.

library("limma")

wg = which(lymphoma$dye=="Cy3")

wr = which(lymphoma$dye=="Cy5")

lymRG = new("RGList", list(

R=exprs(lymphoma)[, wr],

G=exprs(lymphoma)[, wg]))

lymNCS = justvsn(lymRG)

The justvsn method for RGList

converts its argument into an NChannelSet, using a copy

of the coercion method from Martin Morgan in the package convert.

It then passes this on to

the justvsn method for NChannelSet.

The return value is an NChannelSet, as shown below.

lymNCS

## NChannelSet (storageMode: lockedEnvironment)

## assayData: 9216 features, 8 samples

## element names: G, R

## protocolData: none

## phenoData: none

## featureData: none

## experimentData: use 'experimentData(object)'

## Annotation:

Note that, due to the flexibility in the amount and

quality of metadata that is in an RGList, and due to

differences in the implementation of these classes,

the transfer of the metadata into the NChannelSet

may not always produce the expected results, and that some

checking and often further dataset-specific postprocessing

of the sample metadata and the array feature annotation

is needed. For the current example, we

construct the AnnotatedDataFrame object adf

and assign it into the phenoData slot of lymNCS.

vmd = data.frame(

labelDescription = I(c("array ID", "sample in G", "sample in R")),

channel = c("_ALL", "G", "R"),

row.names = c("arrayID", "sampG", "sampR"))

arrayID = lymphoma$name[wr]

stopifnot(identical(arrayID, lymphoma$name[wg]))

## remove sample number suffix

sampleType = factor(sub("-.*", "", lymphoma$sample))

v = data.frame(

arrayID = arrayID,

sampG = sampleType[wg],

sampR = sampleType[wr])

v

## arrayID sampG sampR

## 1 lc7b047 reference CLL

## 2 lc7b048 reference CLL

## 3 lc7b069 reference CLL

## 4 lc7b070 reference CLL

## 5 lc7b019 reference DLCL

## 6 lc7b056 reference DLCL

## 7 lc7b057 reference DLCL

## 8 lc7b058 reference DLCL

adf = new("AnnotatedDataFrame",

data = v,

varMetadata = vmd)

phenoData(lymNCS) = adf

Now let us combine the red and green values from each array

into the glog-ratio M

and use the linear modeling tools from limma to find

differentially expressed genes (note that it is often suboptimal

to only consider M, and that taking into account absolute

intensities as well can improve analyses).

lymM = (assayData(lymNCS)$R -

assayData(lymNCS)$G)

design = model.matrix( ~ lymNCS$sampR)

lf = lmFit(lymM, design[, 2, drop=FALSE])

lf = eBayes(lf)

The following plots show the resulting \(p\)-values and

the expression profiles of the genes corresponding to the

top 5 features.

par(mfrow=c(1,2))

hist(lf$p.value, breaks = 100, col="orange")

pdat = t(lymM[order(lf$p.value)[1:5],])

matplot(pdat, lty = 1, type = "b", lwd = 2, col=hsv(seq(0,1,length=5), 0.7, 0.8),

ylab = "M", xlab = "arrays")

Figure 8: Left: histogram of p-values from the moderated \(t\)-test between the CLL and DLCL groups on the lymM valuesRight: M-values for the 5 genes with the smallest p-values.

5.1 Background subtraction

Many image analysis programmes for microarrays provide local background

estimates, which are typically calculated from the fluorescence signal

outside, but next to the features. These are not always useful. Just

as with any measurement, these local background estimates are also subject

to random measurement error, and subtracting them from the foreground

intensities will lead to increased random noise in the signal. On the

other hand side, doing so may remove systematic artifactual drifts in the

data, for example, a spatial gradient.

So what is the optimal analysis strategy, should you subtract local

background estimates or not? The answer depends on the properties of

your particular data. VSN itself estimates and subtracts an

over-all background estimate (per array and colour, see

Section 9), so an additional local background correction

is only useful if there actually is local variability across an array,

for example, a spatial gradient.

Supposing that you have decided to subtract the local background

estimates, how is it done?

When called with the argument backgroundsubtract=TRUE666

Note that the default value for this parameter is FALSE.,

the justvsn method will subtract local background estimates in

the Rb and Gb slots of the incoming RGList.

To demonstrate this, we construct an RGList object lymRGwbg.

rndbg = function(x, off, fac)

array(off + fac * runif(prod(dim(x))), dim = dim(x))

lymRGwbg = lymRG

lymRGwbg$Rb = rndbg(lymRG, 100, 30)

lymRGwbg$Gb = rndbg(lymRG, 50, 20)

In practice, of course, these values will be read from the image

quantitation file with a function such as read.maimages

that produces the RGList object. We can call justvsn

lymESwbg = justvsn(lymRGwbg[, 1:3], backgroundsubtract=TRUE)

Here we only do this for the first 3 arrays to save compute time.

5.2 Print-tip groups

By default, VSN computes one normalisation transformation with a common set of parameters

for all features of an array (separately for each colour if it is a multi-colour

microarray), see Section 9. Sometimes, there is a need for stratification

by further variables of the array manufacturing process, for example, print-tip groups

(sectors) or microtitre plates. This can be done with the strata parameter of

vsn2.

The example data that comes with the package does not directly provide the information

which print-tip each feature was spotted with, but we can easily reconstruct it:

ngr = ngc = 4L

nsr = nsc = 24L

arrayGeometry = data.frame(

spotcol = rep(1:nsc, times = nsr*ngr*ngc),

spotrow = rep(1:nsr, each = nsc, times=ngr*ngc),

pin = rep(1:(ngr*ngc), each = nsr*nsc))

and call

EconStr = justvsn(lymRG[, 1], strata = arrayGeometry$pin)

To save CPU time, we only call this on the first array. We compare the

result to calling justvsn without strata,

EsenzaStr = justvsn(lymRG[, 1])

A scatterplot comparing the transformed red intensities,

using the two models, is shown in Figure 9.

j = 1

plot(assayData(EsenzaStr)$R[,j],

assayData(EconStr)$R[,j],

pch = ".", asp = 1,

col = hsv(seq(0, 1, length=ngr*ngc),

0.8, 0.6)[arrayGeometry$pin],

xlab = "without strata",

ylab = "print-tip strata",

main = sampleNames(lymNCS)$R[j])

Figure 9: Scatterplot of normalised and transformed intensities for the red channel of Array 1Values on the \(x\)-axis correspond to normalisation without strata (EsenzaStr), values on the \(y\)-axis to normalisation with strata (EconStr). The different colours correspond to the 16 different strata.

6 Missing values

The parameter estimation algorithm of VSN is able to deal with

missing values in the input data. To demonstrate this, we generate an

ExpressionSet lym2 in which about 10% of all intensities

are randomly missing,

lym2 = lymphoma

nfeat = prod(dim(lym2))

wh = sample(nfeat, nfeat/10)

exprs(lym2)[wh] = NA

table(is.na(exprs(lym2)))

##

## FALSE TRUE

## 132711 14745

and call vsn2 on it.

fit1 = vsn2(lymphoma, lts.quantile=1)

fit2 = vsn2(lym2, lts.quantile=1)

The resulting fitted parameters are not identical, but very similar,

see Figure 10.

%

par(mfrow=c(1,2))

for(j in 1:2){

p1 = coef(fit1)[,,j]

p2 = coef(fit2)[,,j]

d = max(abs(p1-p2))

stopifnot(d < c(0.05, 0.03)[j])

plot(p1, p2, pch = 16, asp = 1,

main = paste(letters[j],

": max diff=", signif(d,2), sep = ""),

xlab = "no missing data",

ylab = "10% of data missing")

abline(a = 0, b = 1, col = "blue")

}

Figure 10: Scatterplots of fitted parameters, values on the \(x\)-axis correspond to normalisation without missing data (fit1), values on the \(y\)-axis to normalisation with around 10% missing data (fit2)

Note that p1 and p2 would differ more if we used a different value than 1 for the lts.quantile argument in the above calls of vsn2. This is because the outlier removal algorithm will, for this dataset, identify different sets of features as outliers for fit1 and fit2 and consequently the optimisation result will be slightly different; this difference is arguably negligible compared to the noise level in the data.

7 Normalisation with ‘spike-in’ probes

Normally, VSN uses all features on the array to fit the calibration

and transformation parameters, and the algorithm relies, to a certain

extent, on the assumption that most of the features’ target genes are

not differentially expressed (see also Section 13.2).

If certain features are known to correspond to, or not to

correspond to, differentially expressed targets, then we can help the

algorithm by fitting the calibration and transformation parameters

only to the subset of features for which the “not

differentially expressed” assumption is most appropriate, and then

applying the calibration and transformation to all

features. For example, some experimental designs provide “spike-in”

control spots for which we know that their targets’ abundance is the

same across all arrays (and/or colours).

For demonstration, let us assume that in the kidney data,

features 100 to 200 are spike-in controls. Then we can obtain a

normalised dataset nkid as follows.

spikeins = 100:200

spfit = vsn2(kidney[spikeins,], lts.quantile=1)

nkid = predict(spfit, newdata=kidney)

Note that if we are sufficiently confident that the spikeins

subset is really not differentially expressed, and also has no

outliers for other, say technical, reasons, then we can set the

robustness parameter lts.quantile to 1. This corresponds no

robustness (least sum of squares regression), but makes most use of

the data, and the resulting estimates will be more precise, which may

be particularly important if the size of the spikeins set is

relatively small.

Not that this explicit subsetting strategy is designed for features

for which we have a priori knowledge that their normalised

intensities should be unchanged. There is no need for you to devise

data-driven rules such as using a first call to VSN to get a

preliminary normalisation, identify the least changing features, and

then call VSN again on that subset. This strategy is already built

into the VSN algorithm and is controlled by its lts.quantile

parameter. Please see Section 13.2 and

reference (Huber et al. 2003) for details.

8 Normalisation against an existing reference dataset

So far, we have considered the joint normalisation of a set of arrays

to each other. What happens if, after analysing a set of arrays in

this fashion, we obtain some additonal arrays? Do we re-run the whole

normalisation again for the complete, new and bigger set of arrays?

This may sometimes be impractical.

Suppose we have used a set of training arrays for setting up a

classifier that is able to discriminate different biological states of

the samples based on their mRNA profile. Now we get new test

arrays to which we want to apply the classifier. Clearly, we do not

want to re-run the normalisation for the whole, new and bigger dataset, as this

would change the training data; neither can we normalise only the

test arrays among themselves, without normalising them towards

the reference training dataset. What we need is a normalisation

procedure that normalises the new test arrays towards the existing

reference dataset without changing the latter.

To simulate this situation with the available example data,

pretend that the Cy5 channels of the

lymphoma dataset can be treated as 8

single-colour arrays, and fit a model to the first 7.

ref = vsn2(lymphoma[, ismp[1:7]])

Now we call vsn2 on the 8-th array, with the output

from the previous call as the reference.

f8 = vsn2(lymphoma[, ismp[8]], reference = ref)

We can compare this to what we get if we fit the model to all 8 arrays,

fall = vsn2(lymphoma[, ismp])

coefficients(f8)[,1,]

## [1] -0.396 -3.509

coefficients(fall)[,8,]

## [1] -0.323 -3.507

and compare the resulting values in the scatterplot shown in Figure 11: they are very similar.

plot(exprs(f8), exprs(fall)[,8], pch = ".", asp = 1)

abline(a = 0, b = 1, col = "red")

Figure 11: Scatterplot of normalised intensities after normalisation by reference (\(x\)-axis, f8) and joint normalisation (\(y\)-axis, fall)There is good agreement.

More details on this can be found in the vignettes

Verifying and assessing the performance with simulated data

and

Likelihood Calculations for vsn

that come with this package.

9 The calibration parameters

If \(y_{ki}\) is the matrix of uncalibrated data, with \(k\) indexing the

rows and \(i\) the columns, then the calibrated data \(y_{ki}'\) is

obtained through scaling by \(\lambda_{si}\) and shifting by \(\alpha_{si}\):

\[\begin{equation}

y_{ki}' = \lambda_{si}y_{ki}+\alpha_{si}

\tag{1}

\end{equation}\]

where \(s\equiv s(k)\) is the so-called stratum for feature \(k\). In the

simplest case, there is only one stratum, i.e. the index \(s\) is always

equal to 1, or may be omitted altogether. This amounts to assuming that

the data of all features on an array were subject to the same

systematic effects, such that an array-wide calibration is sufficient.

A model with multiple strata per array may be useful for spotted

arrays. For these, stratification may be according to

print-tip (Dudoit et al. 2002) or PCR-plate (Huber, Heydebreck, and Vingron 2003). For

oligonucleotide arrays, it may be useful to stratify the features by

physico-chemical properties, e.g., to assume that features of

different sequence composition attract systematically different levels

of unspecific background signal.

The transformation to a scale where the variance of the data is

approximately independent of the mean is

\[\begin{eqnarray}

h_{ki} &=& \text{arsinh}(\lambda_0y_{ki}'+\alpha_0) \tag{2} \\

&=& \log\left(

\lambda_0y_{ki}'+\alpha_0+

\sqrt{\left(\lambda_0y_{ki}'+\alpha_0\right)^2+1}\right),\nonumber

\end{eqnarray}\]

with two parameters \(\lambda_0\) and \(\alpha_0\).

Equations (1) and (2) can be combined,

so that the whole transformation is given by

\[\begin{equation}

h_{ki} = \text{arsinh}\left(e^{b_{si}}\cdot y_{ki}+a_{si}\right).

\tag{3}

\end{equation}\]

Here,

\(a_{si}=\alpha_{si}+\lambda_0\alpha_{si}\) and

\(b_{si}=\log(\lambda_0\lambda_{si})\)

are the combined calibation and transformation parameters for features from

stratum \(s\) and sample \(i\). Using the parameter \(b_{si}\) as defined

here rather than \(e^{b_{si}}\) appears to make the numerical

optimisation more reliable (less ill-conditioned).

We can access the calibration and transformation parameters through

coef(fit)[1,,]

## [,1] [,2]

## [1,] -0.550 -5.84

## [2,] -0.535 -5.86

For a dataset with \(d\) samples and \(s\) strata,

coef(fit) is a numeric array with dimensions \((s, d, 2)\).

For the example data that was used in Section 1 to generate

fit, \(d=2\) and \(s=1\).

coef(fit)[s, i, 1], the first line in the results of the above code chunk,

is what was called \(a_{si}\) in Eqn. (3), and

coef(fit)[s, i, 2], the second line, is \(b_{si}\).

9.1 The calibration parameters and the additive-multiplicative error model

VSN is based on the additive-multiplicative error

model (Rocke and Durbin 2001, @Huber:2004:Encyc), which predicts a quadratic variance-mean

relationship of the form (Huber et al. 2002)

\[\begin{equation}

v(u)=(c_1u+c_2)^2+c_3.

\end{equation}\]

This is a general parameterization of a parabola with three parameters

\(c_1\), \(c_2\) and \(c_3\). Here, \(u\) is the expectation value (mean) of

the signal, and \(v\) the variance. \(c_1\) is also called the coefficient

of variation, since for large \(u\), \(\sqrt{v}/u\approx c_1\). The

minimum of \(v\) is \(c_3\), this is the variance of the additive noise

component. It is attained at \(u=-c_2/c_3\), and this is the expectation

value of the additive noise component, which ideally were zero (\(c_2=0\)),

but in many applications is different from zero.

Only the behaviour of \(v(u)\) for \(u\ge -c_2/c_3\) is typically relevant.

The parameters \(a\) and \(b\) from Equation (3)777 I

drop the indices \(s\), \(k\) and \(i\), since for the purpose of this section,

they are passive and the parameters of the additive-multiplicative

error model are related by (Huber et al. 2002)

\[\begin{eqnarray}

a&=&\frac{c_2}{\sqrt{c_3}}\nonumber\\

e^b&=&\frac{c_1}{\sqrt{c_3}}\tag{4}

\end{eqnarray}\]

This relationship is not 1:1, and it has a divergence at \(c_3\to0\); both of these

observations have practical consequences, as explained in the following.

The fact that Equations (4) do not constitute a 1:1

relationship means that multiple parameter sets

of the additive-multiplicative error model can lead to the same

transformation. This can be resolved, for example, if the coefficient of variation \(c_1\) is

obtained by some other means than the vsn2 function. For example, it can be

estimated from the standard deviation of the VSN-transformed data,

which is, in the approximation of the delta method,

the same as the coefficient of variation (Huber et al. 2002, @Huber:2003:SAGMB).

Then,

\[\begin{eqnarray}

c_3&=& c_1^2\, e^{-2b}\nonumber\\

c_2&=& c_1 \, a e^{-b}.\tag{5}

\end{eqnarray}\]

The divergence for \(c_3\to0\) can be a more serious problem. In some

datasets, \(c_3\) is in fact very small. This is the case if the size of

the additive noise is negligible compared to the multiplicative noise

throughout the dynamic range of the data, even for the smallest

intensities. In other words, the additive-multiplicative error model

is overparameterized, and a simpler multiplicative-only model would be

good enough. VSN is designed to still produce reasonable results

in these cases, in the sense that the transformation stabilizes the

variance (it turns essentially into the usual logarithm transformation),

but the resulting fit coefficients can be unstable.

The assessment of the precision of the estimated values of \(a\) and \(b\)

(e.g. by resampling, or by using replicate data) is therefore usually

not very relevant; what is relevant is an assessment of the

precision of the estimated transformation, i.e. how much do the

transformed values vary (Huber et al. 2003).

9.2 More on calibration

Now suppose the kidney example data were not that well measured, and

the red channel had a baseline that was shifted by 500 and a scale

that differed by a factor of \(0.25\):

bkid = kidney

exprs(bkid)[,1] = 0.25*(500+exprs(bkid)[,1])

We can again call vsn2 on these data

bfit = vsn2(bkid)

plot(exprs(bkid), main = "raw", pch = ".", log = "xy")

Figure 12: Scatterplot for the badly biased bkid data: log-log scale

plot(exprs(bfit), main = "vsn", pch = ".")

Figure 13: Scatterplot for the badly biased bkid data: after calibration and transformation with vsn

coef(bfit)[1,,]

## [,1] [,2]

## [1,] -2.011 -4.45

## [2,] -0.535 -5.86

Notice the change in the parameter \(b\) of the red channel: it is now larger by about \(\log(4)\approx 1.4\), and the shift parameter \(a\) has also been adjusted.

10 Variance stabilisation without calibration

It is possible to force \(\lambda_{si}=1\) and \(\alpha_{si}=0\) for all \(s\) and \(i\) in Equation (1) by setting vsn2’s parameter calib to none. Hence, only the global variance stabilisation transformation (2) will be applied, but no column- or row-specific calibration.

Here, I show an example where this feature is used in conjunction with

quantile normalisation.

lym_q = normalizeQuantiles(exprs(lymphoma))

lym_qvsn = vsn2(lym_q, calib="none")

plot(exprs(lym_qvsn)[, 1:2], pch=".", main="lym_qvsn")

Figure 14: Scatterplot between the red and green intensities of the array of the lymphoma dataset after quantile normalisation followed by VSN variance stabilisation without calibration

plot(exprs(lym)[,1], exprs(lym_qvsn)[, 1],

main="lym_qvsn vs lym", pch=".",

ylab="lym_qvsn[,1]", xlab="lym[,1]")

Figure 15: Comparison of the values calculated in this section, for CH1 of the first array, to those of VSN variance stabilisation with affine calibration (lym was computed in Section 3)

11 Assessing the performance of VSN

VSN is a parameter estimation algorithm that fits the parameters for a

certain model. In order to see how good the estimator is, we can look

at bias, variance, sample size dependence, robustness against model

misspecificaton and outliers. This is done in the vignette

Verifying and assessing the performance with simulated data

that comes with this package.

Practically, the more interesting question is how different microarray

calibration and data transformation methods compare to each other.

Two such comparisons were made in reference (Huber et al. 2002), one

with a set of two-colour cDNA arrays, one with an Affymetrix genechip

dataset. Fold-change estimates from VSN led to

higher sensitivity and specificity in identifying differentially

expressed genes than a number of other methods.

A much more sophisticated and wider-scoped approach was taken by the

Affycomp benchmark study. It uses two benchmark

datasets: a Spike-In dataset, in which a small number of cDNAs

was spiked in at known concentrations and over a wide range of

concentrations on top of a complex RNA background sample; and a

Dilution dataset, in which RNA samples from heart and brain

were combined in a number of dilutions and proportions. The design of

the benchmark study, which has been open for anyone to submit their method, was

described in (Cope et al. 2004). A discussion of its results

was given in (Irizarry, Wu, and Jaffee 2006). One of the results that emerged

was that VSN compares well with the background correction and

quantile normalization method of RMA; both methods place a high

emphasis on precision of the expression estimate, at the price

of a certain bias (see also Section 12). Another

result was that reporter-sequence specific effects (e.g., the effect

of GC content) play a large role in these data and that substantial

improvements can be achieved when they are taken into account

(something which VSN does not do).

Of course, the two datasets that were used in Affycomp were somewhat

artificial: they had fewer differentially expressed genes and

were probably of higher quality than in most

real-life applications. And, naturally, in the meanwhile the

existence of this benchmark has led to the development of new

processing methods where a certain amount of overfitting may have

occured.

I would also like to note the interaction between

normalization/preprocessing and data quality. For data of high

quality, one can argue that any decent preprocessing method should

produce more or less the same results; differences arise when the data

are problematic, and when more or less successful measures may be

taken by preprocessing methods to correct these problems.

12 VSN, shrinkage and background correction

## Warning in par(mai): argument 1 does not name a graphical parameter

Figure 16: The shrinkage property of the generalised log-ratioBlue diamonds and error bars correspond to mean and standard deviation of the generalised log-ratio \(h\), as obtained from VSN, and black dots and error bars to the standard log-ratio \(q\) (both base 2).

Figure 17: Graphs of the functions\(y=\log_2(x)\), \(y=\)glog\(_2(x,c)=\log_2(x+\sqrt{x^2+c^2})-1\), and \(y=\log_2(x+x_{\text{off}})\), where \(c=50\) and \(x_{\text{off}}=50\).

Generalised log-ratios can be viewed as a shrinkage estimator:

for low intensities either in the numerator and denominator,

they are smaller in absolute value than the standard log-ratios,

whereas for large intensities, they become equal.

Their advantage is that they do not suffer from the variance

divergence of the standard log-ratios at small intensities: they remain

well-defined and have limited variance when the data come close to zero or

even become negative.

An illustration is shown in Figure 16. Data were

generated from the additive-multiplicative error

model (Rocke and Durbin 2001, @Huber:2003:SAGMB, @Huber:2004:Encyc). The

horizontal line corresponds to the true \(\log_2\)-ratio \(1\)

(corresponding to a factor of 2). For intensities \(x_2\) that are

larger than about ten times the additive noise level \(\sigma_a\),

generalised log-ratio \(h\) and standard log-ratio \(q\) coincide. For

smaller intensities, we can see a variance-bias trade-off:

\(q\) has almost no bias, but a huge variance, thus an estimate of the

fold change based on a limited set of data can be arbitrarily

off. In contrast, \(h\) keeps a constant

variance – at the price of systematically underestimating the true

fold change. This is the main argument for using a variance stabilising

transformation.

Note that there is also some bias in the behaviour of \(q\) for small \(x_2\), particularly at

\(x_2=0.5\). This results from the occurence of negative values in the

data, which are discarded from the sampling when the (log-)ratio is

computed.

Please consult the references for more on the

mathematical background (Huber et al. 2002, @Huber:2003:HSG, @Huber:2003:SAGMB).

It is possible to give a Bayesian interpretation: our prior

assumption is the conservative one of no differential expression.

Evidence from a feature with high overall intensity is taken strongly,

and the posterior results in an estimate close to the empirical

intensity ratio. Evidence from features with low intensity is

downweighted, and the posterior is still strongly influenced by the prior.

13 Quality assessment

Quality problems can often be associated with physical parameters of

the manufacturing or experimental process. Let us look a bit closer at

the lymphoma data. Recall that M is the

9216 times 8 matrix of generalized log-ratios

and A a matrix of the same size with the average

glog\(_2\)-transformed intensities. The dataframe

arrayGeometry (from Section 5.2)

contains, for each array feature, the

identifier of the print-tip by which it was spotted and the row and

column within the print-tip sector. Figure 18

shows the boxplots of A values of array

CLL-13 stratified by row.

colours = hsv(seq(0,1, length = nsr), 0.6, 1)

j = "CLL-13"

boxplot(A[, j] ~ arrayGeometry$spotrow, col = colours, main = j, ylab = "A", xlab = "spotrow")

Figure 18: Boxplot of A values of array CLL-13 stratified by within-sector rowThe features in rows 22 and 23 are all very dim.

You may want to explore similar boxplots for other stratifying factors

such as column within print-tip sector or print-tip sector and look at

these plots for the other arrays as well.

In Figure 18, we see that the features in rows 22 and

23 are all very dim. If we now look at these data in the \(M\)-\(A\)-plot

(Figure @(fig:lymquscp)), we see that these features not only have

low \(A\)-values, but fall systematically away from the \(M=0\) line.

plot(A[,j], M[,j], pch = 16, cex = 0.3,

col = ifelse(arrayGeometry$spotrow%in%(22:23), "orange", "black"))

abline(h = 0, col = "blue")

Figure 19: MA-plot of the data from array r jDots coloured in orange are from rows 22 and 23. A possible explanation may be as follows (although I do not know for sure that this is the right explanation): The PCR product (cDNA) that is spotted on these arrays is put on by a print head that sucks cDNA out of microtitre plates and deposits them in spots one after another, row by row. If the content of one plate is faulty, this results in a set of subsequent spots that are faulty. Because the 16 print-tip sectors are spotted in parallel, this affects all sectors in the same way.

Hence, in a naive analysis

the data from these features would be interpreted as contributing

evidence for differential expression, while they are more

likely just the result of a quality problem.

So what can we do? There are some options:

Flag the data of the affected features as unreliable and set them

aside from the subsequent analysis.

Use a more complex, stratified normalisation method that takes

into account the different row behaviours, for example,

VSN with strata (see Section 5.2).

It has also been proposed to address this type of problem by using

a non-linear regression on the \(A\)-values, for example the

loess normalization of reference (Yang et al. 2001)

that simply squeezes the \(M\)-\(A\)-plot to force the centre of the

distribution of \(M\) to lie at 0 along the whole \(A\)-range.

An advantage of Option 3 is that it works without knowing the real

underlying stratifying factor. However, it assumes that the

stratifying factor is strongly confounded with \(A\), and that biases

that it causes can be removed through a regression on \(A\).

In the current example, if we believe that the real underlying

stratifying factor is indeed row within sector, this assumption means

that (i) few of the data points from rows 22 and 23 have high

\(A\)-values, and that (ii) almost all data points with very low \(A\)

values are from these rows; while (i) appears tenable, (ii) is

definitely not the case.

13.1 Stratifying factors such as print-tip, PCR plate, reporter-sequence

By default, the VSN method assumes that the measured

signal \(y_{ik}\) increases, to sufficient approximation, proportionally

to the mRNA abundance \(c_{ik}\) of gene \(k\) on array \(i\) (or

in colour channel \(i\)):

\[\begin{equation}

y_{ik}\approx \alpha_i + \lambda_i \lambda_k c_{ik}.

\tag{6}

\end{equation}\]

For a series of \(d\) single-colour arrays, \(i=1,\ldots,d\),

and the different factors

\(\lambda_i\) reflect the different initial amounts of sample mRNA or different

overall reverse transcription, hybridisation and detection efficiencies.

The feature affinity \(\lambda_k\) contains factors that affect

all measurements with feature \(k\) in the same manner, such as

sequence-specific labelling

efficiency. The \(\lambda_k\) are assumed to be the same across all arrays.

There can be a non-zero overall offset \(\alpha_i\).

For a two-colour cDNA array, \(i=1,2\), and the \(\lambda_i\) take into account

the different overall efficiencies of the two dyes888

It has been reported that for some genes the dye bias is different from

gene to gene, such that the proportionality factor does not simply factorise

as in (6). As long as this only occurs sporadically, this

will not have much effect on the estimation of the calibration and

variance stabilisation parameters. Further, by using an appropriate

experimental design such as colour-swap or reference design, the effects of

gene-specific dye biases on subsequent analyses can be reduced..

Equation (6) can be generalised to

\[\begin{equation}

y_{ik}\approx \alpha_{is} + \lambda_{is} \lambda_k c_{ik}.

\tag{7}

\end{equation}\]

that is, the background term \(\alpha_{is}\) and the gain factor \(\lambda_{is}\) can

be different for different groups \(s\) of features on an array. The

VSN methods allows for this option by using the strata

argument of the function vsn2. We have seen an example above

where this could be useful. For Affymetrix genechips, one can find

systematic dependences of the affinities \(\lambda_{is}\) and the background

terms \(\alpha_{is}\) on the reporter sequence.

Nevertheless, there are situations in which either

assumption (6) or (7)

is violated, and these include:

Saturation

The biochemical reactions and/or the photodetection

can be run in such a manner that saturation effects occur.

It may be possible to rescue such data by using non-linear transformations.

Alternatively, it is recommended that the experimental parameters are

chosen to avoid saturation.

Batch effects

The feature affinities \(\lambda_k\) may differ between

different manufacturing batches of arrays due, e.g., to different

qualities of DNA amplification or printing. VSN cannot be

used to simultaneously calibrate and transform data from different

batches.

How to reliably diagnose and deal with such violations is beyond the scope

of this vignette; see the references for more (Huber, Heydebreck, and Vingron 2003, @Dudoit578).

13.2 Most genes unchanged assumption

With respect to the VSN model fitting, data from

differentially transcribed genes can act as outliers

(but they do not necessarily need to do so in all cases).

The maximal number of outliers that do not gravely affect the model

fitting is controlled by the parameter lts.quantile.

Its default value is 0.9, which allows for 10% outliers. The value of

lts.quantile can be reduced down to 0.5, which allows for up

to 50% outliers. The maximal value is 1, which results in a

least-sum-of-squares estimation that does not allow for any outliers.

So why is this parameter lts.quantile user-definable and why

don’t we just always use the most “robust” value of 0.5?

The answer is that the precision of the estimated VSN

parameters is better the more data points go into the estimates, and

this may especially be an issue for arrays with a small number of

features999 more precisely, number of features per stratum.

So if you are confident that the number of outliers is not that large,

using a high value of lts.quantile can be justified.

There has been confusion on the role of the ``most

genes unchanged assumption’’, which presumes that only a minority of

genes on the arrays is detectably differentially transcribed across

the experiments. This assumption is a sufficient condition for

there being only a small number of outliers, and these would not gravely

affect the VSN model parameter estimation. However, it is

not a necessary condition: the parameter estimates and the

resulting normalised data may still be useful if the

assumption does not hold, but if the effects of the data from

differentially transcribed genes balance out.

14 Acknowledgements

I acknowledge helpful comments and feedback from Anja von Heydebreck, Richard Bourgon,

Martin Vingron, Ulrich Mansmann and Robert Gentleman. The active development of the

vsn package was from 2001 to 2003, and most of this document was written

during that time (although the current layout is more recent).

Session info

sessionInfo()

## R version 4.3.1 (2023-06-16)

## Platform: x86_64-pc-linux-gnu (64-bit)

## Running under: Ubuntu 22.04.3 LTS

##

## Matrix products: default

## BLAS: /home/biocbuild/bbs-3.18-bioc/R/lib/libRblas.so

## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0

##

## locale:

## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C

## [3] LC_TIME=en_GB LC_COLLATE=C

## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8

## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C

## [9] LC_ADDRESS=C LC_TELEPHONE=C

## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

##

## time zone: America/New_York

## tzcode source: system (glibc)

##

## attached base packages:

## [1] stats graphics grDevices utils datasets methods base

##

## other attached packages:

## [1] limma_3.58.0 hgu95av2cdf_2.18.0 affydata_1.49.1

## [4] affy_1.80.0 ggplot2_3.4.4 vsn_3.70.0

## [7] Biobase_2.62.0 BiocGenerics_0.48.0 BiocStyle_2.30.0

##

## loaded via a namespace (and not attached):

## [1] KEGGREST_1.42.0 gtable_0.3.4 xfun_0.40

## [4] bslib_0.5.1 lattice_0.22-5 bitops_1.0-7

## [7] vctrs_0.6.4 tools_4.3.1 generics_0.1.3

## [10] stats4_4.3.1 tibble_3.2.1 fansi_1.0.5

## [13] AnnotationDbi_1.64.0 RSQLite_2.3.1 blob_1.2.4

## [16] pkgconfig_2.0.3 KernSmooth_2.23-22 S4Vectors_0.40.0

## [19] GenomeInfoDbData_1.2.11 lifecycle_1.0.3 compiler_4.3.1

## [22] farver_2.1.1 Biostrings_2.70.0 statmod_1.5.0

## [25] munsell_0.5.0 codetools_0.2-19 GenomeInfoDb_1.38.0

## [28] htmltools_0.5.6.1 sass_0.4.7 RCurl_1.98-1.12

## [31] yaml_2.3.7 preprocessCore_1.64.0 crayon_1.5.2

## [34] hexbin_1.28.3 pillar_1.9.0 jquerylib_0.1.4

## [37] cachem_1.0.8 magick_2.8.1 tidyselect_1.2.0

## [40] digest_0.6.33 dplyr_1.1.3 bookdown_0.36

## [43] labeling_0.4.3 fastmap_1.1.1 grid_4.3.1

## [46] colorspace_2.1-0 cli_3.6.1 magrittr_2.0.3

## [49] utf8_1.2.4 withr_2.5.1 scales_1.2.1

## [52] bit64_4.0.5 XVector_0.42.0 rmarkdown_2.25

## [55] httr_1.4.7 affyio_1.72.0 bit_4.0.5

## [58] png_0.1-8 memoise_2.0.1 evaluate_0.22

## [61] knitr_1.44 IRanges_2.36.0 rlang_1.1.1

## [64] Rcpp_1.0.11 glue_1.6.2 DBI_1.1.3

## [67] BiocManager_1.30.22 jsonlite_1.8.7 R6_2.5.1

## [70] zlibbioc_1.48.0

References

Alizadeh, Ash A., Michael B. Eisen, R. Eric Davis, Chi Ma, Izidore S. Lossos, Andreas Rosenwald, Jennifer C. Boldrick, et al. 2000. “Distinct Types of Diffuse Large B-Cell Lymphoma Identified by Gene Expression Profiling.” Nature 403: 503–11.

Cope, L. M., R. A. Irizarry, H. A. Jaffee, Z. Wu, and T. P. Speed. 2004. “A benchmark for Affymetrix GeneChip expression measures.” Bioinformatics 20 (3): 323–31.

Dudoit, Sandrine, Yee Hwa Yang, Terence P. Speed, and Matthew J. Callow. 2002. “Statistical Methods for Identifying Differentially Expressed Genes in Replicated cDNA Microarray Experiments.” Statistica Sinica 12: 111–39.

Huber, Wolfgang, Anja von Heydebreck, Holger Sültmann, Annemarie Poustka, and Martin Vingron. 2002. “Variance Stabilization Applied to Microarray Data Calibration and to the Quantification of Differential Expression.” Bioinformatics 18 Suppl 1: 96–104. http://bioinformatics.oxfordjournals.org/content/18/suppl_1/S96.abstract.

Huber, Wolfgang, Anja von Heydebreck, Holger Sültmann, Annemarie Poustka, and Martin Vingron. 2003. “Parameter Estimation for the Calibration and Variance Stabilization of Microarray Data.” Statistical Applications in Genetics and Molecular Biology 2 (1): Article 3. http://www.degruyter.com/view/j/sagmb.2003.2.1/sagmb.2003.2.1.1008/sagmb.2003.2.1.1008.xml.

Huber, Wolfgang, Anja von Heydebreck, and Martin Vingron. 2003. “Analysis of Microarray Gene Expression Data.” In Handbook of Statistical Genetics. John Wiley & Sons, Ltd.

———. 2004. “Error Models for Microarray Intensities.” In Encyclopedia of Genetics, Genomics, Proteomics and Bioinformatics. John Wiley & Sons.

Irizarry, Rafael A., Bridget Hobbs, Francois Collin, Yasmin D. Beazer-Barclay, Kristen J. Antonellis, Uwe Scherf, and Terence P. Speed. 2003. “Exploration, Normalization, and Summaries of High Density Oligonucleotide Array Probe Level Data.” Biostatistics 4: 249–64.

Irizarry, R. A., Z. Wu, and H. A. Jaffee. 2006. “Comparison of Affymetrix GeneChip expression measures.” Bioinformatics 22 (7): 789–94.

Rocke, David M., and Blythe Durbin. 2001. “A Model for Measurement Error for Gene Expression Arrays.” Journal of Computational Biology 8: 557–69.

Yang, Yee Hwa, Sandrine Dudoit, Percy Luu, and Terence P. Speed. 2001. “Normalization for cDNA Microarray Data.” SPIE BiOS.