我想将列名列表传递给purrr :: map公式。 以下是我的问题的代表:
library(dplyr)
library(purrr)
#Make a toy df of w vars of 2 levels
cars <- mtcars %>%
select(mpg, cyl, carb) %>%
filter(cyl == 4 | cyl == 6,
carb == 2 | carb == 4)
#normal fn call, works fine
t.test(mpg ~ cyl, data = cars)
t.test(mpg ~ carb, data = cars)
Welch Two Sample t-test
data: mpg by cyl
t = 3.5371, df = 7.0689, p-value = 0.009356
Welch Two Sample t-test
data: mpg by carb
t = 3.5371, df = 7.0689, p-value = 0.009356
#Make list of cols
list_vars <- names(cars[,-1])
list_vars
[1] "cyl" "carb"
#Attempt map with formula fn call
map(list_vars, ~ t.test(mpg ~ .x, data = cars))
#Results in this error
Error in model.frame.default(formula = mpg ~ .x, data = cars) :
variable lengths differ (found for '.x')
我知道有一个全新的“quosure”编程与dplyr 0.7编程,但这似乎是相当常见的事情,并且早于此。谢谢你的帮助。
答案 0 :(得分:0)
您可以执行上述操作,但如果可以,最好不要在使用purrr
时处理非标准评估。这是另一种方法:
list_vars %>%
map(~ t.test(cars[[.x]], cars$mpg))
这会利用t.test
的默认S3方法,而不是类formula
的S3方法。所以,正在发生的事情是,您将向量作为前两个参数,而不是在数据帧中输入并告诉t.test
在哪里查看。
答案 1 :(得分:0)
另一种方法:
map(list_vars, ~ t.test(mpg ~ col, data = cars %>% rename_("col" = .x)))