我在R
中輸出lme
函數。將列表中的所有矩陣轉換爲R中的data.frames
library(nlme)
fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1)
str(fm2)
正如所看到的,輸出(fm2
)的一些元件是矩陣例如fm2$varFix
我正在尋找一個函數來接受一個對象並將所有的子矩陣轉換爲data.frames
。
我在R
中輸出lme
函數。將列表中的所有矩陣轉換爲R中的data.frames
library(nlme)
fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1)
str(fm2)
正如所看到的,輸出(fm2
)的一些元件是矩陣例如fm2$varFix
我正在尋找一個函數來接受一個對象並將所有的子矩陣轉換爲data.frames
。
也許是這樣的:
lapply(fm2, function(x) {if(any(class(x)=="matrix")) as.data.frame(x) else x})
編輯:雖然這個答案已被接受,我是不滿意的解決方案,因爲它不會轉換爲列表中的遞歸矩陣,元素的屬性丟失。我相信以下解決方案可以解決這兩個問題:
library(nlme)
fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1)
str(fm2)
replace_sub_dataframes <- function(x)
{
if(any(class(x)=="list"))
{
x_copy = x
attrs = setdiff(names(attributes(x)),"names")
x = lapply(x,replace_sub_dataframes)
if(length(attrs)>0)
{
for(i in 1:length(attrs))
{
attr(x,attrs[i]) <- replace_sub_dataframes(attr(x_copy,attrs[i]))
}
}
return(x)
}
else
{
if(any(class(x)=="matrix"))
return(as.data.frame(x))
else
return(x)
}
}
fm3 = lapply(fm2, replace_sub_dataframes)
'class(lapply(fm2,function(x){if(any(class(x) ==「matrix」))as.data.frame(x)else x})$ varFix)[1]「data.frame」class(fm2 $ varFix)「matrix」'Nice solution! –
您的預期產出是多少?也許'掃帚:: tidy(fm2)' – akrun
輸出是同一個對象(列表),但所有的矩陣都被轉換爲數據幀 – MyQ