将列表中的所有矩阵转换为R中的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)
以上是 将列表中的所有矩阵转换为R中的data.frames 的全部内容, 来源链接: utcz.com/qa/261768.html