我想在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)
我理解为什么我收到错误消息,但我无法弄清楚如何使用粘贴打印文字逗号。
编辑:同意粘贴工作正常,在lm()内,这会导致问题吗?答案 0 :(得分:2)
您的问题不在粘贴中。它在lm
。在公式中不会出现逗号,所以当它转换你的粘贴字符串(它正常工作,将它从lm
中拉出来,你会看到这个)到一个公式时,它会对你进行barfs。
此外,鉴于您期望发生的事情,这不是正确的方法。如果你想在这个例子中进行元编程,你应该将整个命令(即lm(string ~ ., DATA)
)构造为一个字符串,然后使用eval
和parse
。所有这些都说,这是一个绝对可怕的编程范式。只需正常构造函数调用或至少使用do.call
。
答案 1 :(得分:0)
我只是想在编辑部分中首先提出nicola的评论,并且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(这是我过去尝试使用“粘贴”的方式),你可以做类似下面的事情。如果这不是你要去的地方,请道歉:
for (C in c("X","Y")) {
out <- lm(paste(C," ~ Z",sep=""),data)
print(out)
}