连接R变量的字符串

时间:2017-12-09 06:35:37

标签: r

我们得到names(mtcars)

 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
[11] "carb"

我想以编程方式构造一个字符串,作为另一个函数的参数传递给我,这就是我想要它的样子: structField("mpg", "double"), structField("cyl", "double"),structField("disp", "double")...

据我所知,我可以提出这个:a = vector("character", ncol(mtcars))

创建一个向量a并从mtcars中为其命名并使用for循环中的名称

names(a) = names(mtcars)  

for(i in names(mtcars)) a[i] = unquote(paste0("structField","(", '"',i,'"', ",", '"', "double", '"', ")"))    

最后一个for语句创建以下向量: mpg cyl "structField(\"mpg\",\"double\")" "structField(\"cyl\",\"double\")" disp hp "structField(\"disp\",\"double\")" "structField(\"hp\",\"double\")" drat wt "structField(\"drat\",\"double\")" "structField(\"wt\",\"double\")" qsec vs "structField(\"qsec\",\"double\")" "structField(\"vs\",\"double\")" am gear "structField(\"am\",\"double\")" "structField(\"gear\",\"double\")" carb "structField(\"carb\",\"double\")"

  1. 如何修改for语句,以便在每个\之前不引入"
  2. 我的想法是使用paste(a, collapse = ",")来获取看起来像这样的最终字符串: "structField(\"mpg\",\"double\"),structField(\"cyl\",\"double\"),structField(\"disp\",\"double\"),...,虽然没有\,但这样做效率更高吗?
  3. 感谢。

1 个答案:

答案 0 :(得分:1)

使用此:

> sapply(names(mtcars), function(x)paste0("structField(","'",x,"'",",","'" ,typeof(mtcars[[x]]),"'",")"))
                           mpg                            cyl 
 "structField('mpg','double')"  "structField('cyl','double')" 
                          disp                             hp 
"structField('disp','double')"   "structField('hp','double')" 
                          drat                             wt 
"structField('drat','double')"   "structField('wt','double')" 
                          qsec                             vs 
"structField('qsec','double')"   "structField('vs','double')" 
                            am                           gear 
  "structField('am','double')" "structField('gear','double')" 
                          carb 
"structField('carb','double')" 

<强>输出

{{1}}