Ошибка: оператор $ недопустим для атомов атома c с ols () - PullRequest
0 голосов
/ 12 января 2020

sessionInfo()

## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 18363)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=English_United States.1252 
## [2] LC_CTYPE=English_United States.1252   
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C                          
## [5] LC_TIME=English_United States.1252    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] compiler_3.6.2  magrittr_1.5    tools_3.6.2     htmltools_0.4.0
##  [5] yaml_2.2.0      Rcpp_1.0.3      stringi_1.4.5   rmarkdown_2.0  
##  [9] knitr_1.26      stringr_1.4.0   xfun_0.11       digest_0.6.23  
## [13] rlang_0.4.2     evaluate_0.14

library(broom,pos=4,quietly=TRUE)
library(dplyr,pos=4,quietly=TRUE)
library(rms,pos=4,quietly=TRUE)

data(mtcars)
df <- within(mtcars, {
    vs <- factor(vs, labels = c("V", "S"))
    am <- factor(am, labels = c("automatic", "manual"))
    cyl  <- ordered(cyl)
    gear <- ordered(gear)
    carb <- ordered(carb)
})
X <- names(df)
rsp <- 1 # response variable
Y <- X[rsp] # response variable (mpg)
Y1 <- paste(Y,"~",sep="")
X1 <- X[-rsp] # omit response variable, (mpg)

Следующий фрагмент взят из Переполнения стека (23 июля 2017 г.) Logisti c регрессия: как попробовать каждую комбинацию предикторов в R?.

n <- 3 # (all) n <- length(X1) 
out <- unlist(lapply(1:n,function(n) combn(X1,n,FUN=function(row) paste0(Y1,paste0(row,collapse="+")))))
mods = lapply(out,function(frml) lm(frml,data=df))
tmp = bind_rows(lapply(out,function(frml) {
    a = glance(lm(frml,data=df))
    a$frml = frml
    return(a)
}))

tmp$r.squared <- round(tmp$r.squared,4)
tmp$adj.r.squared <- round(tmp$adj.r.squared,4)
res2 <- with(tmp,data.frame(frml,r.squared,adj.r.squared,AIC,BIC))
OrdAIC <- res2[order(res2$AIC),]
OrdAIC[1,]

mod <- ols(mpg~wt+qsec+am,data=df,x=T,y=T)

работает

mod <- ols(OrdAIC[1,1],data=df,x=T,y=T)

выдает ошибку: $ оператор недопустим для атомов c Что я делаю неправильно? Как исправить код, чтобы он работал по ссылке, а не по жесткому кодированию?

1 Ответ

0 голосов
/ 12 января 2020

Мне потребовалось некоторое время, чтобы понять вашу проблему.

Итак, прежде чем использовать функцию, посмотрите, что требуется для ввода:

?ols
Usage:

     ols(formula, data, weights, subset, na.action=na.delete, 
         method="qr", model=FALSE,
         x=FALSE, y=FALSE, se.fit=FALSE, linear.predictors=TRUE,
         penalty=0, penalty.matrix, tol=1e-7, sigma,
         var.penalty=c('simple','sandwich'), ...)

Arguments:

 formula: an S formula object, e.g.
          Y ~ rcs(x1,5)*lsp(x2,c(10,20))

Итак, вам нужен объект формулы в качестве ввода и ваш вклад является фактором:

class(OrdAIC[1,1])
[1] "factor"

Для того, чтобы ваш шаг к работе, выполните:

mod <- ols(as.formula(as.character(OrdAIC[1,1])),data=df,x=T,y=T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...