在内部,do
我mutate_
参考原始数据框调用 a 。问题是我无法访问mutate
. 这与lazyeval
包裹有关,但我无法弄清楚。谢谢您的帮助。
例如,假设此函数返回点的 data_frame。
lattice_points <- function (x0, y0, r){
df <- expand.grid(
x1 = ceiling(x0-r):floor(x0+r),
y1 = ceiling(y0-r):floor(y0+r)) %>%
filter((x1-x0)^2 + (y1-y0)^2 <= r^2)
return (df)
}
然后我做了另一个函数来序列化这个(我想用 来标识它id
):
many_lattice_points <- function (df,
id_ = "id", x_ = "x0", y_ = "y0", r_ = "r") {
df_out <- rowwise(df_in) %>%
do( lattice_points(.[x_], .[y_], .[r_])) %>%
mutate_(.dots = interp(~ .[var_], var_ = as.name(id_)))
return (df_out)
}
使用此输入:
> input_df <- data_frame(
id = c("a", "b"), x0 = c(0.5, 5.5),
y0 = c(0.5, 0.5), r = c(1 , 1 ) )
id x0 y0 r
<chr> <dbl> <dbl> <dbl>
1 a 0.5 0.5 1
2 b 5.5 0.5 1
我应该得到以下信息:
id x1 y1
<chr> <dbl> <dbl>
1 a 0.0 0.0
2 a 0.0 1.0
3 a 1.0 0.0
4 a 1.0 1.0
5 b 5.0 0.0
6 b 5.0 1.0
7 b 6.0 0.0
8 b 6.0 1.0
但是,我收到一个错误,因为它找不到该列var_
。
澄清:我找到了其他方法来解决它,但我想利用do
with的力量lazyeval
。