繁体   English   中英

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

[英]How to use simulated object from Synbreed package in the Optisel package in R

我对R非常陌生,目前正在进行简单的仿真。 我正在创建一个谱系结构(数据框)并对其进行编辑,以便进行一些简单的计算。 我正在使用2个不同的软件包:

  1. Synbreed ,可模拟谱系数据帧
  2. Optisel ,允许使用谱系结构进行计算

我遇到的问题如下:一旦我用synbreed的血统书创建了数据框,就加载了optiSel。 在我执行此操作并尝试更改或计算数据框后,数据框内的所有值都将消失/变为NA ...

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

这里有简单的脚本:

启动脚本

library(synbreed)

ped.test<-simul.pedigree(generations=10,ids=10,animals=T) #创建血统书数据帧

数据框需要一些小的编辑:

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) #加载optiSel软件包,一切顺利

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

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

ped.test

结束脚本

从optiSel软件包中,我需要以下功能才能工作:

pedig<-prePed(ped.test)

这需要上面显示的更改才能接受血统结构,但是由于新创建的血统结构为空,因此它不起作用。

我试图重现您与软件包synbreed (v.0.12.6)和软件包optiSel (v.0.9.1)一起提供的代码。

关键是, synbreed包中的函数simul.pedigree返回了"pedigree""data.frame"类的对象,而optiSel包中的prePed函数需要了data.frame类的对象(请尝试?prePed )。

所以,你可以重新分配类的ped.test 只是一个data.frame

library(synbreed)

packageVersion("synbreed")

ped.test<-synbreed::simul.pedigree(generations=10,ids=10,animals=T)

ped.test

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)

class(ped.test) <- "data.frame" # this is the missing step!

library(optiSel)

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

pedig<-prePed(ped.test) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM