在 R 中使用粘贴,包括逗号

Using paste in R including a comma

我想在 R 中粘贴一个包含逗号的字符串(如下所示):如何转义它?

variable <-"string"

命令 1:

lm(paste(variable," ~ ., DATA",sep=""))

错误信息 1:

Error in parse(text = x) : <text>:1:9: unexpected ','

命令 2:

lm(paste(variable," ~ .\, DATA",sep=""))

错误信息 2:

Error: '\,' is an unrecognized escape in character string starting "" ~ .\,"

期望的输出:

lm(string ~ ., DATA)

我明白为什么会收到错误消息,但我不知道如何使用粘贴打印文字逗号。

编辑:同意 paste 单独工作正常,在 lm() 内部,这会导致问题吗?

您的问题不在粘贴中。它在 lm 中。逗号不应该出现在公式中,因此当它将您粘贴的字符串(可以正常工作,将其从 lm 中拉出,您将看到它)转换为公式时,它会向您吐槽。

此外,考虑到您预期会发生的情况,这不是正确的处理方式。如果你想在这种情况下像这样进行元编程,你应该将整个命令(即 lm(string ~ ., DATA))构造为一个字符串,然后使用 evalparse。综上所述,这是一个绝对糟糕的编程范式。只需正常构造函数调用或至少使用 do.call.

我只想赞同上面编辑部分中尼古拉的评论,以及 iShouldUseAName 对公式的警告。例如,下面的作品,我认为它接近你在做什么。

X <- 1:5
Y <- 2:6
Z <- 3:7
variable <- "X"
data <- as.data.frame(cbind(X, Y, Z))
lm(paste(variable," ~ Z",sep=""),data)

因此,如果您想在几个变量之间循环 lm(这就是我过去尝试使用 "paste" 的方式),您可以执行如下所示的操作。抱歉,如果这不是您要处理的地方:

for (C in c("X","Y")) {
  out <- lm(paste(C," ~ Z",sep=""),data)
  print(out)
}