如何在R的Optisel包中使用Synbreed包中的模拟对象

时间:2017-08-10 10:23:38

标签: r dataframe package

我是R的新手,目前正致力于简单的模拟。我正在创建一个谱系结构(数据框)并对其进行编辑以进行一些简单的计算。 我正在使用2个不同的包:

  1. Synbreed,模拟谱系数据框
  2. Optisel,允许使用谱系结构进行计算
  3. 我遇到的问题如下:一旦我用带有synbreed的谱系创建了数据框,我加载了optiSel。在我这样做并尝试使用数据框更改或计算某些内容之后,数据框中的所有值都将消失/变为NA ...

    我想用这些函数进行for循环,所以我需要确保它们是兼容的。奇怪的是,当我保存数据框,关闭R并再次导入模拟数据框时,脚本可以正常工作。

    这里我有一个简单的脚本:

    启动脚本

    library(synbreed)

    ped.test<-simul.pedigree(generations=10,ids=10,animals=T) #create血统数据框

    数据框需要一些小编辑:

    ped.test$Par1[ped.test$Par1==0]<-NA
    ped.test$Par2[ped.test$Par2==0]<-NA
    ped.test$sex[ped.test$sex==1]<-2
    ped.test$sex[ped.test$sex==0]<-1
    

    数据框是一个谱系结构:

    class(ped.test)
    

    library(optiSel) #Load optiSel包,一切顺利

    colnames(ped.test)<-c("Indiv", "Sire", "Dam", "Born", "Sex")
    

    现在我只想更改为列名,甚至不使用optiSel包中的函数,但data.frame值将消失。

    ped.test
    

    结束脚本

    从optiSel包中我需要以下函数才能工作:

    pedig<-prePed(ped.test)

    这需要上面显示的更改才能接受谱系结构,但由于新创建的谱系结构为空,它不会起作用。

1 个答案:

答案 0 :(得分:0)

我尝试重现您使用包synbreed(v.0.12.6)和包optiSel(v.0.9.1)提供的代码。

关键是来自simul.pedigree包的函数synbreed从{{1}返回类"pedigree""data.frame"prePed函数的对象package需要一个类optiSel的对象(try data.frame)。

因此,您可以将?prePed的类重新指定为 一个ped.test

data.frame