【问题标题】:Edit the 'term' object in glm() function在 glm() 函数中编辑“术语”对象
【发布时间】:2018-10-23 20:36:49
【问题描述】:

我有一个名为modelTrain 的对象,由glm() 函数生成。该对象还有其他几个对象,例如:coefficientsformulaterms 等。

 modelTrain<- glm(Def90Adj ~ .-1,data=base,family=binomial(link='logit'))

我必须更改一些变量的名称,以保留用于预测的值。 modelTrain 中的对象之一是“呼叫”(或“语言”)类型

其内容如下:

attr(,"variables")
list(Def90Adj, `AveLncerLimiteRatio(0,1.04]`, `AveLncerLimiteRatio(1.04,3.96]`, 
`AveLncerLimiteRatio(11.4,40.3]`, `AveLncerLimiteRatio(3.96,11.4]`, 
`AveLncerLimiteRatio(40.3, Inf]`, `Ave6mEvoluçãoAvencerRatio(0, Inf]`, 
`Ven6mEvoluçãoVencidoRatio(0.0001, Inf]`, `Ven6mEvoluçãoVencidoRatio[-Inf,-0.0001]`, 
`Avvencer(0,1.01e+04]`, `AVBenNegAVenRatio(0, Inf]`, 
`AVeNnNociAVenRatio(0, Inf]`, LimDummy, VencidoDummy, 
PrejuDummy, AVedncerDummy)

我想将带有"Ven6mEvoluçãoVencidoRatio(0.0001, Inf]" 等特殊字符的名称更改为"Ven6mEvolucaoVencidoRatio(0.0001, Inf]"(不带特殊字符)

我尝试复制不带特殊字符的当前内容

attr(modelTrain$terms, "variables") <- list((Def90Adj,AveLncerLimiteRatio(0,1.04]....

但它会抛出错误:

未找到“Def90Adj”。

【问题讨论】:

  • 在将数据添加到模型之前,这可能更容易处理

标签: r


【解决方案1】:

蛮力法使用quote():

L1 <- quote(list(Def90Adj, `AveLncerLimiteRatio(0,1.04]`, `AveLncerLimiteRatio(1.04,3.96]`, 
`AveLncerLimiteRatio(11.4,40.3]`, `AveLncerLimiteRatio(3.96,11.4]`, 
`AveLncerLimiteRatio(40.3, Inf]`, `Ave6mEvolucaoAvencerRatio(0, Inf]`, 
`Ven6mEvolucaoVencidoRatio(0.0001, Inf]`, `Ven6mEvolucaoVencidoRatio[-Inf,-0.0001]`, 
`Avvencer(0,1.01e+04]`, `AVBenNegAVenRatio(0, Inf]`, 
`AVeNnNociAVenRatio(0, Inf]`, LimDummy, VencidoDummy, 
PrejuDummy, AVedncerDummy))

要以编程方式执行此操作,您需要以下内容:

for (i in 2:length(L1)) {
    L1[[i]] <- substitute(x,list(x=gsub("V","v",deparse(L1[[i]]))))
}

(这个例子只是将大写的 V 改为小写的 v ...)

this question 的回答建议stringi::stri_trans_general(x,"Latin-ASCII") 将重音字符转换为其非重音类似物...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2015-04-03
    • 2011-07-24
    • 2018-04-18
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多