如何将字符元素的引号转换为反引号而不是 R 中的引号

How to convert quotes of character elements to be surrounded by backticks instead of quotes in R

我将一些字符存储为 cols。结果输出如下:

cols = c("big creek", "gage creek", "garvey creek", "larches creek", "little usable")
cols
[1] "big creek"       "gage creek"      "garvey creek"    "larches creek"   "little usable"

但是,我希望将引号替换为反引号,结果输出应该是这样的:

[1] `big creek`       `gage creek`      `garvey creek`    `larches creek`   `little usable`

有什么方法可以为 R 中的 cols 对象获得相同的输出?

非常感谢您的帮助。

此致, 法汉

您的字符串实际上没有引号,它们只是以这种方式出现在控制台上。当使用 $.

子集时,您必须在带有空格的变量名周围设置反引号可能会让您感到困扰

在 R 中,syntactically valid object names 应仅由字母、数字、点和下划线组成,第一个字符不包含数字或点。您可以使用 make.names.

轻松修复该问题

示例:

df <- data.frame(`big creek`=1:3, `gage creek`=4:6, `garvey creek`=7:9, check.names=F)
df
#   big creek gage creek garvey creek
# 1         1          4            7
# 2         2          5            8
# 3         3          6            9

names(df) 
# [1] "big creek"    "gage creek"   "garvey creek"  ## invalid names

df$`big creek`  ## rather annoying backticks needed
# [1] 1 2 3

cols1 <- names(df)  ## vector of column names
cols1
# [1] "big creek"    "gage creek"   "garvey creek"

make.names(cols1)  ## `make.names` fixes names
# [1] "big.creek"    "gage.creek"   "garvey.creek"

names(df) <- make.names(cols1)
names(df) 
# [1] "big.creek"    "gage.creek"   "garvey.creek"  ## valid names

## actually you don't need to cache in a vector and just may do
names(df) <- make.names(names(df))

从那时起,使用有效名称进行编码并单独标记您的数据,例如:

barplot(colSums(df), names.arg=c("big creek", "gage creek", "garvey creek"))

就是说,如果您仍然想让字符串用反引号包围,您可以使用 sprintf

sprintf('`%s`', cols)
# [1] "`big creek`"     "`gage creek`"    "`garvey creek`"  "`larches creek`" "`little usable`"

你不能有一个包含反引号引用名称的向量。既然你说你正在使用 for 循环,你可以使用 as.name:

转换每个名称以在 for 循环中包含反引号
as.name(cols[1])
`big creek`

lapply(cols, as.name)
[[1]]
`big creek`

[[2]]
`gage creek`

[[3]]
`garvey creek`

[[4]]
`larches creek`

[[5]]
`little usable`

也许是这样的:

result <- gsub('^(.{0})(.*)$', '\1`\2`', cols)
paste(result, collapse = " ")

输出:

1] "`big creek` `gage creek` `garvey creek` `larches creek` `little usable`"