R:将输入变量转换为字符串 - “deparse(substitute(x))”不起作用

时间:2015-04-10 14:42:07

标签: r

我正在尝试创建一个接收数据帧并添加一个新变量的函数,该变量是输入数据帧的名称。例如:

foo <- data.frame(x = 1:10, y = rep(c("a", "b")))
mutate(foo, id = "foo") 

这似乎相当微不足道,因为它的工作原理如下:

var_as_string <- function(x) {deparse(substitute(x))}

var_as_string(foo)

Result:
[1] "foo"

我认为这也是,但它没有:

add_id <- function(x) {
    mutate(x, id = deparse(substitute(x)))
}

add_id(foo)

Result:
   zz yy id
1   1  a  x
2   2  b  x
3   3  a  x
4   4  b  x
5   5  a  x
6   6  b  x
7   7  a  x
8   8  b  x
9   9  a  x
10 10  b  x

作为一项测试,我试过这个并且它没有像我想象的那样工作:

var_as_string2 <- function(x) {
  var_string <- var_as_string(x)
  var_string(x)
}

var_as_string2(foo)

Result:
[1] "x"

有解决方案吗?我在这里忽略了什么,或者我对R中的函数有一个基本的误解?

1 个答案:

答案 0 :(得分:2)

使用lazyeval可能有更好的单行方式来实现这一目标,但这似乎有效

add_id <- function(x) {
    s <- as.character(substitute(x))
    mutate(x, id = s)
}

add_id(foo)

(与您尝试做的相比,您必须在s来电之外评估mutate