我在弄清准引用时遇到了一些麻烦,特别是我有一个函数,该函数具有一个参数,该参数具有特殊性,该变量应进入模型,然后在purrr :: map调用中运行。
我一直在工作:https://dplyr.tidyverse.org/articles/programming.html
# libs
library(tidyverse)
library(broom)
# dummy data
df <- data.frame(
"a"=rep(c("alpha","beta"),50),
"b"=rnorm(100),
"value1"=rnorm(100),
"value2"=rnorm(100)
)
model <- function(var) {
var <- enquo(var)
df %>%
group_by(a) %>%
nest() %>%
mutate(model=map(data, ~ lm(b ~ (!! var),data=.)))
}
model(value1)
> Error in mutate_impl(.data, dots) : Evaluation error: invalid model formula.
直接输入名称可以按预期工作:
df %>%
group_by(a) %>%
nest() %>%
mutate(model=map(data, ~ lm(b ~ value1,data=.))) %>%
unnest(model %>% map(glance))
我可以在函数中使用!! var
:
modelX <- function(var,df=df) {
var <- enquo(var)
df %>%
select(!! var)
}
modelX(value1,df)
我假设这与!! var
引用嵌套小标题data
中的值有关,我一直在研究rlang::qq_show()
,但到目前为止还无法弄清楚”
答案 0 :(得分:1)
import { last } from 'rxjs/operators';
this.getCurrentStatus().pipe(last()).subscribe(status => {
console.log(status);
if (status) {
// treatment 1
} else {
// treatment 2
}
});
private status$: Subscription;
getCurrentStatus(): Observable<Boolean> {
if (!this.status) {
this.status$ = this.store.pipe(select(fromUserSelector.getAuthStatus)).subscribe((status: Boolean) => {
this.status = status;
});
}
return of(this.status);
}
会尝试跟踪您传入的符号的环境,但是您实际上并不希望在传递给enquo()
的公式中包含该符号。最好将其捕获为符号而不是担保。试试这个
lm
与model <- function(var) {
var <- ensym(var)
df %>%
group_by(a) %>%
nest() %>%
mutate(model=map(data, ~ lm(b ~ !!var, data=.)))
}
和dplyr_0.7.6
一起为我工作