【发布时间】:2015-06-16 08:12:13
【问题描述】:
我正在尝试创建一个函数,该函数接受一个数据框并添加一个新变量,该变量是输入数据框的名称。例如:
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 中的函数有根本的误解?
【问题讨论】:
-
mutate可以来自dplyr或plyr。我假设你想要一个基于dplyr的解决方案? -
抱歉,我使用的是
plyr...mutate部分工作正常,当在内部使用deparse(substitute(x))时,变量名没有被分配为id定义函数 -
通过创建与@konvas 的函数相同的方式,
deparse(substitute(为我工作。但是,我使用的是dplyr。即add_id <- function(x) {s <- deparse(substitute(x)); mutate(x, id = s)}
标签: r