如何将双引号插入传递给粘贴函数的字符串向量?

How to insert double quotes to a string vector that is being passed to a paste function?

我有一个 data.frames 的循环,我想将它们转换成长格式。我将某些字符串存储在一个向量中,我打算将它们作为 id.vars 传递给 melt() 语句。

这里有四个data.frames,转载

df1<-structure(list(Year = 2012L, Area = "South", TopSumOfCount = 780L), .Names = c("Year", 
"Area", "TopSumOfCount"), row.names = c(NA, -1L), class = "data.frame")

df2<-structure(list(Year = 2012L, Category = "Condiments", TopSumOfCount = 780L), .Names = c("Year", 
"Category", "TopSumOfCount"), row.names = c(NA, -1L), class = "data.frame")

df3<-structure(list(Year = 2012L, Area = "South", TopSumOfCount = 780L), .Names = c("Year", 
"Area", "TopSumOfCount"), row.names = c(NA, -1L), class = "data.frame")

df4<-structure(list(Year = 2012L, Category = "Condiments", TopSumOfCount = 780L), .Names = c("Year", 
"Category", "TopSumOfCount"), row.names = c(NA, -1L), class = "data.frame")

AllDF_Names<-c("df1","df2","df3","df4")

为了以长格式呈现它,我需要使用一个 melt() 我遇到了使用组合 function.The 的需要 id.vars 被存储在一个向量中我希望保持这种状态!

因此,我使用此 dQuote 尝试在拆分字符串 "Year,Area" 后插入双引号,并尝试获得类似 "c(\"Year\",\[ 的字符串=32=])"

ParticipantsForMelt<-c("Year,Area", "Year,Category", "Year,Area", "Year,Category")
 for(i in 1:length(AllDF_Names){


 MeltStatement[i]<-paste0(AllDF_Names[i],"_long<-melt(",
               AllDF_Names[i],",","id.vars=",
               dQuote(strsplit(ParticipantsForMelt[i],",")),")")
 eval(parse(text=MeltStatement[i]))
}

上面代码中的问题是我在一个不寻常的位置得到了双引号:(注意结果中 c(...) 之前的双引号)

df1_long<-melt(df1,id.vars=“c(\"Year\", \"Area\")”)

期望的输出:

df1_long<-melt(df1,id.vars=c(\"Year\", \"Area\"))

一种方法是编写一个小函数然后应用 gsub:

addDoubleQuotes <- function(...)as.character(sys.call())[-1]

b=addDoubleQuotes(c("Year,Area", "Year,Category", "Year,Area", "Year,Category"))

> b
[1] "c(\"Year,Area\", \"Year,Category\", \"Year,Area\", \"Year,Category\")"

> gsub(",", '", "',b)

[1] "c(\"Year\", \"Area\"\", \" \"Year\", \"Category\"\", \" \"Year\", \"Area\"\", \" \"Year\", \"Category\")"