簡體   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