【发布时间】:2018-02-24 12:33:43
【问题描述】:
我想在一个函数中使用一个函数,其列名编码为dplyr,如下所示,这会引发以下错误:
grouped_df_impl(data, unname(vars), drop) 中的错误:列
G是 未知
代码:
# rm(list = ls())
set.seed(12345)
Y <- rnorm(10)
Env <- paste0("E", rep(1:2, each = 5))
Gen <- paste0("G", rep(1:5, times = 2))
df1 <- data.frame(Y, Env, Gen)
fn1 <- function(.data, .gen, .env, .y){
Y <- deparse(substitute(.y))
G <- deparse(substitute(.gen))
E <- deparse(substitute(.env))
ge_means <-
.data %>%
dplyr::group_by(!!rlang::sym(G), !!rlang::sym(E)) %>%
dplyr::summarize(Mean = mean(!!rlang::sym(Y)))
return(list(
ge_means = ge_means
))
}
fn1(
.data = df1
, .gen = Gen
, .env = Env
, .y = Y
)
fn2 <- function(.data, .gen, .env, .y){
Y <- deparse(substitute(.y))
G <- deparse(substitute(.gen))
E <- deparse(substitute(.env))
ge_means1 <-
fn1(
.data = .data
, .gen = G
, .env = E
, .y = Y
)$ge_mean
return(list(
ge_means1 = ge_means1
))
}
fn2(
.data = df1
, .gen = Gen
, .env = Een
, .y = Y
)
【问题讨论】:
-
请不要发布像
rm(...)这样会破坏读者工作空间的破坏性命令。 -
提醒您,我们希望您不要添加多少您会感谢所有帖子的答案。在普通谈话中这是一种礼貌,但在adding to editors' workloads 时,则恰恰相反。以后请不要再做吗?
-
感谢您使您最近提出的问题更加简洁。这是一个明确的改进,并将减少您的帖子所需的工作量。我还将提供以下建议:
backtick device添加了适用于代码、日志、错误和控制台 IO 的简短示例的内联代码格式。它带有一定的语义,不是一般的荧光笔。 -
因此,如果您想谈论通用软件、服务和编程语言,这些不需要需要代码格式化,因为它们的名称(Python、Ubuntu、GitHub 等)是不是自己的代码。它们本质上是专有名词,因此只需要以正确的大小写(通常是首字母大写)呈现。库处于中间地带,因为它们的名称被输入到包管理器中,因此它们可以被视为 IO。但是,如果有疑问,请不要添加格式 - 这会造成混淆且不必要。
标签: r function debugging dplyr