【问题标题】:remove spaces added with using as.formula删除使用 as.formula 添加的空格
【发布时间】:2016-02-07 18:38:51
【问题描述】:

我从文本创建公式,但生成的公式包含不需要的空格。有没有办法防止这种情况发生。

# text in which variables for formula are stored

mainEffectText ="age sex bmi cohort"
interactionText="age*cohort"

# get text into R

mainEffects <- read.table(textConnection(mainEffectText))
mainEffects <- t(mainEffects)
mainEffects <- as.character(mainEffects[,1])

interactions <- read.table(textConnection(interactionText))
interactions <- t(interactions)
interactions <- as.character(interactions[,1])


# put all terms into one vector
allTerms <- c(mainEffects,interactions)

# create formula
form <- as.formula(paste("Surv(time, event) ~ ",paste(allTerms, collapse=" +")))

这给出了以下内容,并在交互项中添加了空格:

form
# Surv(time, event) ~ age + sex + bmi + cohort + age * cohort

【问题讨论】:

  • 为什么空格是个问题?
  • 它是否过于可读?
  • 在运行回归方面,空格似乎没有问题。我正在努力提高我对 R 的这些方面的理解。我尝试了许多不起作用的方法。

标签: r


【解决方案1】:

空格并不是真正的问题,但无论如何试试这个:

# inputs
mainEffectText <- "age sex bmi cohort"
interactionText <- "age*cohort"
lhs <- "Surv(time, event)"

both <- paste(mainEffectText, interactionText)
paste0(gsub(" ", "", lhs), "~", gsub(" ", "+", both))

给予:

"Surv(time,event)~age+sex+bmi+cohort+age*cohort"

如果输入是这种形式(lhs 同上),则使用:

# inputs
mainEffects <- c("age", "sex", "bmi", "cohort")
interactions <- "age*cohort"

both <- paste(paste(mainEffects, collapse = " "), 
              paste(interactions, collapse = " "))
paste0(gsub(" ", "", lhs), "~", gsub(" ", "+", both))

【讨论】:

  • 多年来我一直在听取您的建议。一旦使用了.formula,空格仍然会出现,对吧?
  • 是的,如果将其转换为公式并打印公式,则会出现空格。如果s 是上面生成的字符串,而fo &lt;- as.formula(s) 则可以将其转换回字符串:gsub(" ", "", format(fo)) 以删除空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 2019-11-25
相关资源
最近更新 更多