Có lẽ như thế này:
lapply(fm2, function(x) {if(any(class(x)=="matrix")) as.data.frame(x) else x})
EDIT: Mặc dù câu trả lời này đã được chấp nhận, tôi đã không hài lòng với giải pháp, vì nó không chuyển đổi ma trận mà nằm trong danh sách đệ quy, và các thuộc tính của các phần tử bị mất. Tôi tin rằng giải pháp sau giải quyết cả hai vấn đề:
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)
Sản lượng mong đợi của bạn là gì? Có lẽ 'chổi :: gọn gàng (fm2)' – akrun
Đầu ra là cùng một đối tượng (danh sách) nhưng tất cả ma trận được chuyển đổi sang khung dữ liệu – MyQ