区分lm对象和rlm对象
Distinguish between lm object and rlm object
我试图区分 LM 对象和 RLM(来自 MASS 的稳健 LM),因为根据回归类型,我想执行这样或那样的事情。所以 fitList 可以是 lm 或 rlm 模型,因为列表中的所有元素都是同一类型。
fitList作为几个正态线性模型的列表:
fitList[[1]]$call
Output: lm(formula = frmla, data = xList[[i]])
在第二种情况下,fitList 作为几个稳健线性模型的列表:
fitList[[1]][1]$call
Output: rlm(formula = frmla, data = xList[[i]], method = "MM")
如您所见,两个模型中使用的公式的获取方式不同。我想要一种区分两者的方法,并告诉我该列表是线性模型列表还是稳健线性模型列表。经过多次尝试,我还没有找到一种方法来获得它是哪一个。
有什么建议吗?
可重现的例子:
library(MASS)
fitlm <- lm(Height ~., trees)
fitrlm <- rlm(Height ~., trees)
class(fitlm)[1]
class(fitrlm)[1]
1) inherits 这将 return 一个逻辑对象,fm
,是否属于 "rlm"
class returning TRUE
如果是 FALSE
否则:
inherits(fm, "rlm")
例如,
if (inherits(fm, "rlm")) {
# process rlm
} else {
# process lm
}
如果 L
是此类模型的列表,那么这会处理所有模型:
f <- function(fm) {
# if statement above
}
lapply(L, f)
或者获取一个逻辑向量来指示哪些是 "rlm"
模型:
sapply(L, inherits, "rlm")
2) S3 Dispatch 另一种方法是定义一个 process
泛型,然后定义一个方法来处理每个 class。在此示例中,我们只是 return class 的名称,但在您的应用程序中,您将用所有处理替换它以处理 class.
的对象
process <- function(x, ...) UseMethod("process")
process.rlm <- function(x, ...) "rlm"
process.lm <- function(x, ...) "lm"
process.default <- function(x, ...) "error"
lapply(L, process)
我试图区分 LM 对象和 RLM(来自 MASS 的稳健 LM),因为根据回归类型,我想执行这样或那样的事情。所以 fitList 可以是 lm 或 rlm 模型,因为列表中的所有元素都是同一类型。
fitList作为几个正态线性模型的列表:
fitList[[1]]$call
Output: lm(formula = frmla, data = xList[[i]])
在第二种情况下,fitList 作为几个稳健线性模型的列表:
fitList[[1]][1]$call
Output: rlm(formula = frmla, data = xList[[i]], method = "MM")
如您所见,两个模型中使用的公式的获取方式不同。我想要一种区分两者的方法,并告诉我该列表是线性模型列表还是稳健线性模型列表。经过多次尝试,我还没有找到一种方法来获得它是哪一个。
有什么建议吗?
可重现的例子:
library(MASS)
fitlm <- lm(Height ~., trees)
fitrlm <- rlm(Height ~., trees)
class(fitlm)[1]
class(fitrlm)[1]
1) inherits 这将 return 一个逻辑对象,fm
,是否属于 "rlm"
class returning TRUE
如果是 FALSE
否则:
inherits(fm, "rlm")
例如,
if (inherits(fm, "rlm")) {
# process rlm
} else {
# process lm
}
如果 L
是此类模型的列表,那么这会处理所有模型:
f <- function(fm) {
# if statement above
}
lapply(L, f)
或者获取一个逻辑向量来指示哪些是 "rlm"
模型:
sapply(L, inherits, "rlm")
2) S3 Dispatch 另一种方法是定义一个 process
泛型,然后定义一个方法来处理每个 class。在此示例中,我们只是 return class 的名称,但在您的应用程序中,您将用所有处理替换它以处理 class.
process <- function(x, ...) UseMethod("process")
process.rlm <- function(x, ...) "rlm"
process.lm <- function(x, ...) "lm"
process.default <- function(x, ...) "error"
lapply(L, process)