如何将双引号插入传递给粘贴函数的字符串向量?
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\")"
我有一个 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\")"