R:在函数内使用 dplyr。 eval(expr, envir, enclos) 中的异常:未知列

2023-11-23

我在 R 中创建了一个函数友善的帮助@Jim M.

当我运行该函数时,我收到错误:错误:未知列“原始数据”当查看调试器时,我收到消息:Rcpp::eval(expr, envir, enclos) 中的异常:未知列“rawdata”

然而,当我查看环境窗口时,我可以看到已传递给函数的 2 个变量,它们包含具有 7 个级别因子的原始数据信息和具有 28 个级别的参考数据

function (refdata, rawdata)
{
  wordlist <- expand.grid(rawdata = rawdata, refdata = refdata,     stringsAsFactors = FALSE)
  wordlist %>% group_by(rawdata) %>% mutate(match_score =     jarowinkler(rawdata, refdata)) %>%
summarise(match = match_score[which.max(match_score)], matched_to = ref[which.max(match_score)])
}

这是使用 NSE(非标准评估)的函数的问题。使用 NSE 的函数在交互式编程中非常有用,但会在开发中引起许多问题,即当您尝试在其他函数中使用这些函数时。由于表达式没有被直接求值,R 无法在它所查找的环境中找到对象。我建议您阅读here最好是范围问题章节以获取更多信息。

首先你需要知道所有的标准dplyr函数使用 NSE。让我们看一下您的问题的一个大概示例:

Data:

df <- data.frame(col1 = rep(c('a','b'), each=5), col2 = runif(10))


> df
   col1       col2
1     a 0.03366446
2     a 0.46698763
3     a 0.34114682
4     a 0.92125387
5     a 0.94511394
6     b 0.67241460
7     b 0.38168131
8     b 0.91107090
9     b 0.15342089
10    b 0.60751868

让我们看看 NSE 如何解决我们的简单问题:

首先,简单的交互式案例有效:

df %>% group_by(col1) %>% summarise(count = n())

Source: local data frame [2 x 2]

  col1 count
1    a     5
2    b     5

让我们看看如果我把它放在一个函数中会发生什么:

lets_group <- function(column) {
  df %>% group_by(column) %>% summarise(count = n())
}

>lets_group(col1)
Error: index out of bounds 

和你的错误不一样,但它是由 NSE 引起的。完全相同的代码行在函数之外工作。

幸运的是,有一个解决方案可以解决您的问题,那就是标准评估。 Hadley 还制作了所有函数的版本dplyr使用标准评估。它们只是普通功能加上_末尾加下划线。

现在看看这是如何工作的:

#notice the formula operator (~) at the function at summarise_
lets_group2 <- function(column) {
  df %>% group_by_(column) %>% summarise_(count = ~n())
}

这会产生以下结果:

#also notice the quotes around col1
> lets_group2('col1')
Source: local data frame [2 x 2]

  col1 count
1    a     5
2    b     5

我无法测试你的问题,但使用 SE 而不是 NSE 会给你你想要的结果。欲了解更多信息,您还可以阅读here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:在函数内使用 dplyr。 eval(expr, envir, enclos) 中的异常:未知列 的相关文章

随机推荐

  • 如何更改log4j中的htmllayout

    我想更改Java中log4j的htmllayout 5列 时间 线程 级别 类别 消息 我的 log4j properties 是 log4j rootLogger DEBUG Console File log4j appender Con
  • org.apache.catalina.LifecycleException:子容器在启动期间失败

    SEVERE A child container failed during start java util concurrent ExecutionException org apache catalina LifecycleExcept
  • Spring - 无法解析 MVC“视图”thymeleaf

    我有一个简单的HomeController class package com example tacos import org springframework stereotype Controller import org spring
  • 获取 C 时区的夏令时转换日期

    在 C 中 是否有一种简单的跨平台方法来检索给定时区开始和结束夏令时的日期 我已经有了时区偏移信息以及当前是否正在观察夏令时 但我确实需要夏令时开始和结束的日期 对于我无法控制的外部依赖项 在 Windows 中 我正在使用获取时区信息 t
  • 在构造函数内分配原型

    我有这个代码 var MyClass function b this a b this getA function return that a var SecondClass function b this prototype new My
  • Multer 不接受数组格式的文件会出现“意外文件错误”

    Multer是与node js和express一起使用的用于上传文件的模块 我在角度方面使用 ng file upload 模块 当我一一发送多个文件时 它工作得很好 没有任何错误 但是当我以数组格式一次性发送所有文件 然后按照 Multe
  • Android ndk(cmake):在第二个 jni 库中使用日志 api 时,“未定义引用‘__android_log_write’”

    我使用 Android Studio 2 2 和 cmake 来构建 jni 文件 我想在 jni 文件中显示日志 但收到错误消息 未定义对 android log write 的引用 我的 CMakeLists txt 文件是 add l
  • CFG 的扩展,它是什么?

    考虑以下上下文无关语法的扩展 它允许规则在左侧有一个 或多个 终端在非终端的右侧 即 形式规则 A b gt 右侧可以是任何东西 就像在上下文无关语法中一样 特别是 它是not要求右侧末尾具有完全相同的终端符号 在这种情况下 此扩展将是上下
  • 大多数签名/未签名警告的可接受修复?

    我本人确信 在我正在研究的项目中 有符号整数在大多数情况下是最佳选择 即使其中包含的值永远不会是负数 更简单的反向 for 循环 更少的错误机会等 特别是对于只能保存 0 到 20 之间的值的整数 大多数出错的地方是 std vector
  • Android Play Places 出现 PLACES_API_INVALID_APP 错误

    我正在尝试 Google Place Autocomplete 示例https github com googlesamples android play places 我已将正确的 API 密钥放在正确的位置 我知道这一点是因为当我输入随
  • 关于:下载文件时浏览器中出现空白#被阻止

    我正在尝试从本地服务器下载文件 也许将来我需要在其他服务器上执行此操作 当我单击链接下载浏览器中的文件时 会出现此消息 about blank blocked 我正在使用 axios 和vue js 代码是这样的 downloadItem
  • Flex:如何检测用户是否阻止共享对象写入

    简单的问题是 如果用户已阻止将数据写入共享对象 我如何在动作脚本中检测 sharedObj SharedObject getLocal rememberme 这个返回总是共享对象 但它的大小是0 即使我已经阻止了共享对象 当我尝试将数据保存
  • 如何将多个python文件转换为EXE?

    我正在尝试将我的 python 应用程序转换为 exe 我见过像 py2exe 和 cx freeze 这样的东西 但它们只编译一个 py 文件 谁能帮我 谢谢 我目前使用py安装程序用于将项目构建为单个可执行文件 这些项目都包含多个Pyt
  • gacutil 构建后事件已退出,代码为 1

    我正在尝试在 GAC 中注册并组装构建后活动 这是我的构建后命令 C Program Files x86 Microsoft SDKs Windows v7 0A Bin NETFX 4 0 Tools x64 gacutil exe if
  • 如何在主目录中创建文件夹?

    我想创建一个目录path HOME somedir 我尝试过使用boost filesystem create directory path 但它失败了 显然该函数不会扩展系统变量 我怎样才能以最简单的方式做到这一点 注意 在我的例子中 字
  • 从单个项目源构建多个 jar

    我对 gradle 还很陌生 我想知道是否可以从同一项目源构建多个 jar 我浏览过以前的类似问题 但我的情况有点不同 我想将所有源文件编译两次以生成两个不同的 jar 每个 jar 具有不同的依赖项和不同的工件 id 从概念上讲 它可以表
  • MongoDB中每条记录的更新时间

    MongoDB 的 ObjectId 有一个 getTimestamp 方法 该方法返回插入记录的时间 是否有类似的方法来获取上次更新的时间 或者我应该使用单独的列来保存此数据 使用 PHP 如果重要的话 MongoDB 不存储最后的更新
  • 使用 jQuery 检查页面加载时的所有复选框

    在页面加载时 使用 jQuery 如何自动选择特定 div 中的所有复选框 function thediv input checkbox attr checked checked
  • 如何在war文件中运行java类文件[重复]

    这个问题在这里已经有答案了 我有一个名为 Sample war 的战争文件 在这个战争文件中 我有一个名为 Maintest 的主类 我想从战争之外运行或执行Maintest类 如何做到这一点 War 文件只是带有额外元数据的 Jar 文件
  • R:在函数内使用 dplyr。 eval(expr, envir, enclos) 中的异常:未知列

    我在 R 中创建了一个函数友善的帮助 Jim M 当我运行该函数时 我收到错误 错误 未知列 原始数据 当查看调试器时 我收到消息 Rcpp eval expr envir enclos 中的异常 未知列 rawdata 然而 当我查看环境