![](/img/trans.png)
[英]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.