我对R有点新,我有这段代码生成一个我不知道类型的变量.R中是否有任何内省工具可以告诉我这个变量属于哪种类型?
以下说明了此变量的属性:
我正在研究线性模型选择,我所拥有的资源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"
>
Run Code Online (Sandbox Code Playgroud)
在内省方面:R允许您轻松检查和操作语言对象.
有关更多详细信息,请参阅R语言定义,尤其是第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)))
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您尝试更新公式,则可以使用update():
baz <- update(bar, . ~ . - 1)
baz$call
##>lm(formula = y ~ x1 - 1, data = data.frame(y = rnorm(10), x1 = rnorm(10)))
Run Code Online (Sandbox Code Playgroud)