foshuochanyu

  •  
  • 2018年8月30日
  • 注册于 2009年8月13日
  • 回复 第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()函数,查看源码

    getMethod(f = "initialize", signature = "ANY")
    因此在使用callNextMethod()时,对象检查机制正常运行。
    </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()函数,比如:
    <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 />
    
    </p>

    当然,还有一个解决办法是使用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不舒服斯基。