当我在dplyr的across中查找传递给.fns参数的自定义函数中指定参数时遇到了一些麻烦。
data(iris)
ref_col <- "Sepal.Length"
iris_summary <- iris %>%
group_by(Species) %>%
summarise(
Sepal.Length_max = max(Sepal.Length),
across(
Sepal.Width:Petal.Width,
~ .x[which.max(get(ref_col))]
)
)
接下来我需要用一个自定义函数替换lambda函数,然后将inside请求的参数传递给across(在我的代码中,自定义函数比较复杂,嵌入dplyr管道中也不方便),请看下面的代码:
ref_col <- "Sepal.Length"
get_which_max <- function(x, col_max) x[which.max(get(col_max))]
iris_summary <- iris %>%
group_by(Species) %>%
summarise(
Sepal.Length_max = max(Sepal.Length),
across(
Sepal.Width:Petal.Width,
~ get_which_max(.x, ref_col)
)
)
R现在给出错误“object 'Sepal.Length' not found”,因为它在管道进程中查找一个对象而不是列名。有人能帮我解决这个问题吗?
1条答案
按热度按时间v1l68za41#
我们可以使用
cur_data()
或pick
(来自dplyr的devel版本)来选择列。另外,从get_which_max
中删除get