gpt4 book ai didi

r - 如何在 R 中进行自省(introspection)

转载 作者:行者123 更新时间:2023-12-04 19:22:41 24 4
gpt4 key购买 nike

我对 R 有点陌生,我有这段代码会生成一个我不知道其类型的变量。 R中是否有任何自省(introspection)工具可以告诉我这个变量属于哪个类型?

下面说明这个变量的属性:

我正在研究线性模型选择,我拥有的资源是 lm另一个模型的结果。现在我想检索 lm通过命令 summary(model)$call 调用,这样我就不需要对模型结构进行硬编码。但是,由于我必须更改数据集,因此我需要对“字符串”进行一些修改,但显然它不是一个简单的字符串。我想知道是否有任何类似于 string.replace 的命令,以便我可以从变量 $call 中操作这个变量。

> str<-summary(rdnM)$call
> str
lm(formula = y ~ x1, data = rdndat)
> str[1]
lm()
> str[2]
y ~ x1()
> str[3]
rdndat()
> str[3] <- data
Warning message:
In str[3] <- data :
number of items to replace is not a multiple of replacement length
> str
lm(formula = y ~ x1, data = c(10, 20, 30, 40))
> str<-summary(rdnM)$call
> str
lm(formula = y ~ x1, data = rdndat)
> str[3] <- 'data'
> str
lm(formula = y ~ x1, data = "data")
> str<-summary(rdnM)$call
> type str
Error: unexpected symbol in "type str"
>

最佳答案

在自省(introspection)方面:R 允许您轻松地检查和操作语言对象。
更多详情,请参阅 R Language Definition ,特别是第 2 节和第 6 节。例如,在您的情况下, summary(rdnM)$call 是一个“调用”对象。您可以通过索引来检索它的一部分,但是您不能像您尝试做的那样通过分配给索引来构造另一个调用对象。你必须构造一个新的调用。

在您的情况下,您正在从现有调用中构建对 lm() 的更新调用。如果您想在不同的数据上重复使用公式,您可以通过 formula(foo$call) 从调用对象中提取公式,像这样:

 foo <- lm(formula = y ~ x1, data = data.frame(y=rnorm(10),x1=rnorm(10)))
bar <- lm(formula(foo$call), data = data.frame(y=rnorm(10),x1=rnorm(10)))

另一方面,如果您尝试更新公式,您可以使用 update() :
baz <- update(bar, . ~ . - 1)
baz$call
##>lm(formula = y ~ x1 - 1, data = data.frame(y = rnorm(10), x1 = rnorm(10)))

关于r - 如何在 R 中进行自省(introspection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2467329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com