r - 双括号(即 {{}}、大花括号)在 tidyr::complete() 和 tidyr::nesting() 中不起作用
问题描述
我不能让双括号(即,{{}}
卷曲)在我自己的函数中tidyr::complete()
和tidyr::nesting()
在我自己的函数中使用。此代码有效:
library(tidyverse)
cw_subset <- ChickWeight[, c("Chick", "Time", "weight")]
cw_complete <- cw_subset %>%
complete(Time = seq(min(Time), max(Time), by = 1),
nesting(Chick))
但是,如果我尝试创建一个函数来做同样的事情:
complete_data <- function(x, variable){
x %>%
complete(Time = seq(min(Time), max(Time), by = 1),
nesting({{variable}}))
}
cw_complete <- cw_subset %>%
complete_data(variable = Chick)
我收到以下错误:
Error in eval_tidy(dots[[i]], data = out) : object 'variable' not found
有什么想法吗?
解决方案
你可以写成complete
——
library(dplyr)
library(tidyr)
complete_data <- function(x, variable){
x %>% complete(Time = seq(min(Time), max(Time), by = 1), {{variable}})
}
cw_complete <- cw_subset %>% complete_data(variable = Chick)
要使用nesting
,您可以使用ensym
-
complete_data <- function(x, variable){
x %>%
complete(Time = seq(min(Time), max(Time), by = 1),
nesting(!!ensym(variable)))
}
推荐阅读
- swift - 为什么 Swift 接受应该返回元组的代码,而是返回一个字符串?
- c# - 读取一个 csv 文件,并为读取的每条记录插入另一个文件
- graphql - 如何为graphql-client设置超时
- php - 从 MySQL 获取大量数据时超时?
- android - 如何获取在 editText 上输入的信息?
- python - 如何让这个程序无限循环,直到输入特定的整数 4?
- php - Laravel 多个 where 子句通过变量检查空值
- java - Hibernate with H2 在建立实体管理器时出现错误(Eclipse/Java)
- java - Windows 上多线程 Java 应用程序的 CPU 使用率过低
- c# - 为什么自签名 PFX X509Certificate2 私钥会引发 NotSupportedException?