【发布时间】:2016-03-04 06:08:38
【问题描述】:
R 中的assign 函数能否用于将对象名称分配给模型(例如 gls 模型)?我猜不是 b/c 我一直收到警告:
> Warning messages:
In assign(paste0(deparse(substitute(mod)), "_", i, j), update(mod, :
only the first element is used as variable name
因此没有创建对象
有没有办法做到这一点?
如果有帮助,这是我的功能代码:
#Choose best corARMA structure for model of choice:
corARMA.chooser <- function(mod,min = 0,max = 3 ) {
#This function creates 1. object for each combo of ARMA {0:3} 2. AIC table comparing all of these models
mod <- get('mod')
aic.arma <- AIC(mod)
ps <- 0
qs <- 0
for(i in min:max) {
js <- if(i == 0) c(1:max) else c(min:max)
for(j in js) {
arma <- corARMA(p = i, q = j)
assign(paste0(deparse(substitute(mod)),'_',i,j), update(mod, .~., correlation = arma), envir = .GlobalEnv)
aic.arma <- c(aic.arma, AIC(get(paste0(deparse(substitute(mod)),'_',i,j))))
ps <- c(ps, i)
qs <- c(qs, i)
}
aic.arma.out <- data.frame(ps, qs, aic.arma)
aic.arma.out
}
}
更新:
我尝试使用列表方法,但出现错误:
Error in names(mod.list) <- c(names(mod.list), paste0(deparse(substitute(mod)), :
'names' attribute [1275] must be the same length as the vector [1]
【问题讨论】:
-
使用
list。错误也不同于警告。 -
有点模糊。你能详细说明一下吗?
-
与其尝试为模型分配名称,不如将模型放在一个列表中。命名列表很容易。对列表的每个元素进行处理很容易。总的来说要好得多。 See my answer here for a data frame example.
-
至于另一部分,警告说 Warning,表示您的代码确实执行了,但是您应该验证潜在的问题。它们提请您注意可能存在的问题,但不一定表示存在问题。错误说 Error 并且意味着代码根本没有执行,它们绝对是一个问题。当你说你“猜测某事没有工作”时,说有一个错误,但显示警告文本,我们想知道它是否真的按预期工作而你没有意识到它或者它是否做了什么否则结果与您的预期有何不同。
-
如果您需要更多详细信息,您应该分享一些示例输入 - 希望是一个非常简单的案例。您想要的输出看起来相当清楚,但是由于您没有有错误,因此明确说明与您想要的输出相比,您的示例输入的输出是如何缺失的。