经过几个月的使用这个论坛,我终于有一个问题的社区,我似乎不能找到充分解决其他地方。
在R中,我创建了一个函数,当通过map()传递时,它接受单个列名,但不接受列名列表。问题似乎是求值问题,所以我尝试了quo()和enquo(),但由于我不太理解它们是如何工作的,我需要一些帮助。
我已经尝试过迭代不同版本的函数(根据错误信息注解掉违规的行),但这只会移动问题,而不会解决它。
# Load:
library(tidyverse)
# Create df:
set.seed(12)
df <- tibble(col1 = sample(c("a", "b", "c"), 10, replace = TRUE),
col2 = sample(1:4, 10, replace = TRUE),
col3 = sample(1:4, 10, replace = TRUE))
# My function:
my_function <- function(col_name) {
df <- df %>%
filter({{ col_name }} != 1) %>%
group_by(fct_relevel(factor(col1), "c", "b", "a")) %>%
mutate(col4 = 5 - {{ col_name }}) %>%
summarise("Score" = mean(col4)) %>%
rename("Levels" =
`fct_relevel(factor(col1), "c", "b", "a")`)
return(df)
}
# List of col_names to pass to function:
col_list <- list(df$col2, df$col3)
# Attempt function in map() using list of col_names:
map(col_list, my_function)
# Gives error message:
# Error in `mutate()`:
# ! Problem while computing `col4 = 5 - c(1L, 2L, 1L, 2L,
# 4L, 2L, 2L, 3L, 4L, 1L)`.
# ✖ `col4` must be size 2 or 1, not 10.
# ℹ The error occurred in group 1: fct_relevel(factor(col1), "c",
# "b", "a") = c.
1条答案
按热度按时间htzpubme1#
您遇到的一个问题是,
col_list
实际上不是列名列表,而是来自这些列的实际数据。我不太确定你希望得到什么样的输出,但我猜应该是
my_function
的结果的full_join
。现在,我意识到,也许我没有理解你的真正意图。例如,也许你试图理解如何使用
purrr::map
。如果是这样,请评论或更新你的问题。在任何情况下,您都应该查看Programming with dplyr