如何将变量(对象)名称转换为字符串

158

我有一个名为"foo"的数据框,其内容如下:

 > foo <-c(3,4);

我想要做的是将"foo"转换为字符串。这样在函数中,我就不必再创建额外的变量了。

   output <- myfunc(foo)
   myfunc <- function(v1) {
     # do something with v1
     # so that it prints "FOO" when 
     # this function is called 
     #
     # instead of the values (3,4)
     return ()
   }

4
只是好奇 - 你为什么需要从一个对象中获取对象名称? - CHP
4
我有一个样例用法:我有一个函数,它以向量作为参数,并将该向量的值附加到数据框中的一列中。我还需要将值的来源(即初始向量的名称)填充到另一列中。完成。 - Ricky
1
使用 exists() 需要一个字符串。 - Elin
3
将对象的字符串名称传递到其输出文件名可能会很有用。 - fred
我的建议是:编写一个绘图函数,使用给定的变量名称作为标签/图例。 - annhak
1个回答

308

你可以使用deparsesubstitute来获取函数参数的名称:

myfunc <- function(v1) {
  deparse(substitute(v1))
}

myfunc(foo)
[1] "foo"

2
@MahdiJadaliha 您可以尝试使用此函数:myfunc <- function(v1) { s <- substitute(v1); if (length(s) == 1) deparse(s) else sub("\\(.", "", s[2]) } - Sven Hohenstein
4
如果有多个对象,要如何实现呢?具体而言,如何以一种方式获取每个对象名称的单独字符串? (例如,如果我有对象foo、foo1和foo2,并且想要创建一个它们名称的字符串列表,作为单独的字符字符串)。 - theforestecologist
2
如果函数有多个参数,您可以针对每个参数使用 deparse(substitute(.)),将结果存储在一个变量中,然后将这些变量放入列表中。 - Sven Hohenstein
9
当您使用for循环时,这种方法不起作用。 - SumNeuron
2
你也可以使用deparse(quote(var)),其中quote冻结了var的评估,而deparse是parse的反函数,将符号转换回字符串。 - cloudscomputes
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接