将列表中的所有矩阵转换为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

回到顶部