[英]How to use 'unexported' datasets from an R package within another package
[英]How to use simulated object from Synbreed package in the Optisel package in R
我对R非常陌生,目前正在进行简单的仿真。 我正在创建一个谱系结构(数据框)并对其进行编辑,以便进行一些简单的计算。 我正在使用2个不同的软件包:
Synbreed
,可模拟谱系数据帧 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")
ped.test
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.