当前位置: 首页 > 知识库问答 >
问题:

如何将列名传递到使用dplyr的自定义函数中?

萧鹏云
2023-03-14

我编写了这个函数,它只是用子字符串替换数据表列中的每个值:

substrColName <- function(df, colName, start) {
    df %>% mutate(colName = substr(colName, start=start, stop=nchar(colName)))
}

但每次我试着运行它时,我都会发现错误:

Error in as.character(x) : cannot coerce type 'closure' to vector of type 'character'

现在我已经做了很多关于为什么它不起作用的研究,但我不明白。我读过一些关于标准评估和懒散的东西,但我尝试的似乎都不管用。有什么帮助吗?

谢谢

共有1个答案

杜海
2023-03-14

谢谢,@ycw,这是一个很好的阅读。在完成文章后,现在就开始工作了。这是一天结束时的解决方案:

substrColName <- function(df, colName, start) {
    colNameQuo <- enquo(colName)
    df %>% mutate(!!quo_name(colNameQuo) := substr(!!colNameQuo, start=start,stop=nchar(!!colNameQuo)))
}

这是ycw的评论。

 类似资料:
  • 我有一个具有以下结构的数据集: 我想提供一个函数,它允许计算任何值之间的差异,我想这样做使用s这样的函数:(假设参数和作为参数传递) 当然,这不起作用,因为使用非标准评估。我知道现在有一个优雅的解决方案,可以使用来解决这个问题,我已经读过这个小插曲,但我仍然无法理解它。 怎么办? 以下是数据集的前几行,以获得一个可复制的示例

  • 我试图编写一个函数,该函数采用数据帧和变量名(或变量名列表),并使用group_by和summary函数输出摘要信息。然而,我不断得到以下错误之一: 或此错误: 最后一个错误表示它找不到名为“value”的列,该列包含数据框的值(熔化后)。 这是我的代码: 这是一个小数据示例。请注意,“变量”是一个总是被传递到group_by函数中的列,所以我决定将其硬编码。 如何编写此函数,使其接受group_

  • 问题内容: 我可以在R中使用以下代码在任何通用SQL数据库中选择不同的行。我会使用,但SQL语法不支持它。无论如何,这确实有效: 我一直在成功使用它,但是想知道如何在其他dplyr步骤之后传递相同的SQL查询,而不是像上面所示那样仅将其用作第一步。最好用一个例子来说明: 因此,我有两个SQL表,然后我要查看不同的行,并保留所有列。是否如上所述将SQL代码通过管道传递到R中(简单地利用该函数)?如果

  • 我正在尝试使用对每一行执行一个函数并创建一个考虑多列的新列,我最初使用的是,但速度非常慢。我希望我的自定义函数中的列列表是一个变量,但除非显式地列出变量名,否则无法使其工作。例如,这是可行的: 但如果我希望它使用列输入作为vars进行计算:

  • 基于这个线程,我创建了一个动态列名w/dplyr::mutate(),在'dplyr'中使用动态变量名,现在我想对新列进行排序。。。。但我没有正确传递列名