回复 第4楼 的 kuanguang:“千分号符”是给人看的,又不是给机器看的。加上个逗号,机器当然看不懂这是个数字。
请教一个问题:
在S4中,如果来判断一个对象是否属于特定子类?
举例:比如对象testObj属于类‘classSon’,‘classSon’又是类’classFather’的子类。
is(testObj, 'classSon')返回结果TRUE,is(testObj, 'classFather')也返回结果TRUE。
所以,问题:是否有一个函数只检测testObj所属的特定子类,而不包括其父类。即,函数检测testObj是否属于‘classSon’时,返回结果TRUE;而检测testObj是否属于‘classFather’时,则返回FALSE。谢谢~~
回复 第1楼 的 andornot:http://blog.sina.com.cn/s/blog_61f013b80100yhef.html,可以参考这个。
回复 第3楼 的 月珥:又长见识了,原来是这样的。
"topGO" package in Bioconductor is suitable for these jobs, especially the GO analysis and category-plotting ("Output" things in your query). For the "Input" format, gene names conversion could be easily done by some web-bases tools like "gene converter" http://idconverter.bioinfo.cnio.es/. R packages such as "biomaRt" is also in the recommended list if you are familiar with R language. For the gene/protein sequence query, I have not found a R package with this kind of function. My suggestion is converting gene sequence to its name at first, and then using the tools mentioned above.
Since GO analysis is quite a hot topic, if someone has any better ideas, please share with me. Thanks.[s:13]回复 第1楼 的 wuxian2r:"biomaRt" package in Bioconductor provides a great interface for online querying these "gene-name" databases, for example, Ensembl and Uniprot. Further information could be found in package vignette.
回复 第2楼 的 谢益辉:非常感谢,搞清楚了。“双冒号”形式的引用我也做了尝试,如果不把引用的包放入import(),有时可能无法正确输出结果。比如用双冒号引用方法,可能无法输出S4的对象。
为什么无法回复帖子,有敏感词?
非常感谢大家热心的回复和帮助,[s:13]。
我查了很久,现在有两个解决办法:
1. 一个哥们提供了一种R的解决办法,详见 http://rdataviz.wordpress.com/2010/03/05/getting-data-from-an-image-introductory-post/ (需要科学上网)。这种方法需要用户自己在图上画点,这肯定有偏差,但这种方法能行得通。在对付点很少,而且精度要求不高的情况下,可以尝试下。在阅读Writing R Extensions过程中遇到一些问题,请教大家,具体是:
1. 在写NAMESPACE文件时,如果声明“引用”了某个包中的变量,比如:importFrom(foo, g),即从名为“foo”的包中引用函数g。那么,自己在写代码时,是不是就可以直接使用函数g,而不需要加入require(foo)之类的语句?
我自己调查了一些包,看到不需要使用require()函数再次载入;而且从逻辑上讲,如果使用了require(foo)函数,不就把foo的命名空间都载入了,这不就违背NAMESAPCE文件的设计意图了?但还是感觉拿不准,所以上来问问。2. NAMESPACE文件中如果声明引用某个包全部变量,比如import(foo),这与require(foo)有什么区别?
3. 同时,又看到可以使用操作符"::"或者":::"引用命名空间的变量。那么,我的问题是,在代码时使用这种方法引用命名空间的变量,比如foo::g,是不是就不需要在NAMESPACE文件中声明了?
谢谢~~
回复 第4楼 的 suckbunny:恩,就是因为搞不到原始数据,才想如此下策。
回复 第2楼 的 刘思喆:谢谢版主[s:13]
哦,为什么不做呢?
那如果确实想从图片中提取数据,应该用什么办法?想请教一下,R中是否有对应的包,可以解决以下问题:
从图片中提取数据,具体而言:比如输入一张已经做好的散点图或者折线图(png等格式),能否将其中的点的坐标提取出来。当然,处理之前,需要用户输入一些图的基本信息,比如横纵坐标的取值范围等。
请各位指点这个想法在R中是否可行,或者需要使用其他工具,又或者这个想法很傻很天真。
谢谢~~回复 第2楼 的 micro@:回复 第2楼 的 micro@:Thanks [s:13], the pdf file is great.
请问自由度为1的卡方分布和正态分布之间有什么关系,因为运行如下代码获得如下结果:
<br /> pvalue <- 0.04<br /> (qnorm(1-pvalue/2))^2<br /> ## [1] 4.217885<br /> qchisq(pvalue, df = 1, lower.tail = FALSE)<br /> ## [1] 4.217885<br />
谢谢各位~~
</p>
请问如何能够列出一个包中的所有S4“类”和其对应的“方法”,谢谢。
回复 第4楼 的 ming_uld:服务器可以用snow不?
回复 第1楼 的 foshuochanyu:[s:12] 自己回复自己帖子。鼓捣了一晚上,搞定了这个疑问。默认initialize函数(signature = "ANY")确实调用了validObject()函数,查看源码
因此在使用callNextMethod()时,对象检查机制正常运行。getMethod(f = "initialize", signature = "ANY")
</p>
请问在S4中,initialize函数和对象检查机制(validity)的运行顺序是什么?举一个例子说明我的疑问:
<br /> # definition of "testClass"<br /> setClass(<br /> Class = "testClass",<br /> representation = representation(Nor = "numeric", Con = "character"),<br /> validity = function(object){<br /> if (length(object@Nor) != length(object@Con)){<br /> stop("Hello, it is wrong!")<br /> } else TRUE<br /> }<br /> )</p> <p># initialize method for "testClass"<br /> setMethod(<br /> f = "initialize",<br /> signature = "testClass",<br /> definition = function(.Object, Nor, Con){<br /> if (!missing(Nor)){<br /> names(Nor) <- letters[1:length(Nor)]<br /> .Object@Nor <- Nor<br /> .Object@Con <- Con<br /> }<br /> return(.Object)<br /> }<br /> )</p> <p># a right object<br /> new("testClass", Nor = 1:5, Con = letters[1:5])<br /> ## An object of class "testClass"<br /> ## Slot "Nor":<br /> ## a b c d e<br /> ## 1 2 3 4 5 </p> <p>## Slot "Con":<br /> ## [1] "a" "b" "c" "d" "e"</p> <p># a wrong object<br /> new("testClass", Nor = 1:3, Con = letters[1:5])<br /> ## An object of class "testClass"<br /> ## Slot "Nor":<br /> ## a b c<br /> ## 1 2 3 </p> <p>## Slot "Con":<br /> ## [1] "a" "b" "c" "d" "e"<br />
很明显,如果这样设定initialize函数,建立的对象逃过了检查。这说明使用自己设定的initialize函数,检查机制没有运行或者没有发挥作用。解决办法是设定initialize函数时,加上validObject()函数,比如:
</p><br /> setMethod(<br /> f = "initialize",<br /> signature = "testClass",<br /> definition = function(.Object, Nor, Con){<br /> if (!missing(Nor)){<br /> names(Nor) <- letters[1:length(Nor)]<br /> .Object@Nor <- Nor<br /> .Object@Con <- Con<br /> validObject(.Object)<br /> }<br /> return(.Object)<br /> }<br /> )</p> <p>new("testClass", Nor = 1:3, Con = letters[1:5])<br /> ## 错误于validityMethod(object) : Hello, it is wrong!<br />
当然,还有一个解决办法是使用callNextMethod(),比如:
<br /> setMethod(<br /> f = "initialize",<br /> signature = "testClass",<br /> definition = function(.Object, ...){<br /> .Object <- callNextMethod()<br /> if (length(.Object@Nor) != 0)<br /> names(.Object@Nor) <- letters[1:length(.Object@Nor)]<br /> return(.Object)<br /> }<br /> )</p> <p>new("testClass", Nor = 1:3, Con = letters[1:5])<br /> ## 错误于validityMethod(object) : Hello, it is wrong!<br />
这时,我就感到疑惑了。因为在使用callNextMethod()函数时,调用了“默认”的initialize函数(也可能我理解错误,callNextMethod()调用的不是默认函数,而是其他。如是,请批评指正),对象检查机制正常运行。因此,为什么自己设定的intialize函数没有运行检查机制,而默认的函数却运行了。initialize函数和对象检查机制的运行顺序究竟是什么呢?
</p>
回复 第3楼 的 谢益辉:knitr很爽,不用knitr不舒服斯基。