我正在尝试编写一个函数,它接收一个数据框并添加一个新变量,该变量为输入数据框的名称。例如:
作为测试,我尝试了这个方法,但它并没有像我想象的那样起作用:
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
的解决方案? - akrunplyr
...mutate
部分没有问题,但是在定义的函数中使用deparse(substitute(x))
时,变量名未被分配为id
。 - jdesilviodeparse(substitute(
对我有用。但是,我正在使用dplyr
。即add_id <- function(x) {s <- deparse(substitute(x)); mutate(x, id = s)}
- akrun