deparse(substitute()) 正常返回函数名称,但在 for 循环内调用时返回函数代码

2023-12-30

我对 R 在一个非常具体的情况下的行为感到有点惊讶。假设我定义了一个函数square返回其参数的平方,如下所示:

square <- function(x) { return(x^2) }

我想在另一个函数中调用这个函数,并且我还想在这样做时显示它的名称。我可以使用deparse(substitute())。但是,请考虑以下示例:

ds1 <- function(x) {
  print(deparse(substitute(x)))
}

ds1(square)
# [1] "square"

这是预期的输出,所以一切都很好。但是,如果我传递包装在列表中的函数并使用 for 循环处理它,则会发生以下情况:

ds2 <- function(x) {
  for (y in x) {
    print(deparse(substitute(y)))
  }
}

ds2(c(square))
# [1] "function (x) "   "{"               "    return(x^2)" "}"  

谁能向我解释为什么会发生这种情况以及如何防止它发生?


一旦你使用x在函数内部,它被求值,因此它“不再是(未求值的)表达式”并且“开始是其结果值(求值的表达式)”。为了防止这种情况,您必须捕获x by substitute在您第一次使用它之前。

的结果substitute是一个可以像列表一样查询的对象。所以你可以使用

x <- substitute(x)

进而x[[1]](函数名称)和x[[2]]和以下(函数的参数)

所以这有效:

ds2 <- function(x) {
    x <- substitute(x)
    # you can do `x[[1]]` but you can't use the expression object x in a
    # for loop. So you have to turn it into a list first
    for (y in as.list(x)[-1]) {
        print(deparse(y))
    }
}
ds2(c(square,sum))
## [1] "square"
## [1] "sum"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

deparse(substitute()) 正常返回函数名称,但在 for 循环内调用时返回函数代码 的相关文章

  • 将强化的 data.frame 转换回 sf 对象

    五十斯塔特包提供了一张很棒的美国地图 其中有夏威夷和阿拉斯加 如下图所示 对象五十 州已经得到加强 可以与 ggplot2 一起使用 但是 我想使用 geom sf 将其绘制为 sf 对象 作为一个更普遍的问题 将强化的 data fram
  • 如何在不指定数据集的情况下调整函数

    我有一个函数 基本上可以过滤SPV行 如下所示 请注意 我这样做return coef lt function df1 idd dmda CategoryChosse 然而 我不希望df1作为函数的参数 而是函数的属性df1数据集 在本例中
  • 保存/加载 data.table 的最快方法

    我想做的实际上是使用最快的可用方法来存储data table以便进一步处理 大致如下 从 CSV RDS 读取原始数据 将其转换为data table 将其保存为针对重新读取而优化的格式 RDS 似乎不适用于data table 是对的吗
  • ggplot2 的组合图(不在单个图中),使用 par() 或 layout() 函数? [复制]

    这个问题在这里已经有答案了 我一直在考虑使用 par 或 layout 函数来组合 ggplots 可以使用这些功能吗 假设我想绘制 ggplot 散点图和 ggplot 直方图 我想将这两个地块合并起来 而不是在一个地块中 是否适用 我在
  • 中断、保存并稍后继续循环的最佳方法

    事情是这样的 我有一个需要几天时间才能运行的循环 我想中断循环 检查进度 然后稍后继续 目前 我正在使用以下内容 for i in 1 100000 Sys sleep i 2 5 print i write csv i i csv 我检查
  • 什么是 data.frame 可以做而 data.table 不能做的事情?

    我刚刚开始使用 R 并遇到了 data table 我发现它很棒 一个非常天真的问题 我可以忽略 data frame 来使用 data table 以避免两个包之间的语法混淆吗 来自数据表常见问题解答 http datatable r f
  • 如何规划庭院灯最有效的路线

    我正在尝试挂一些庭院灯 基于另一个问题 https cs stackexchange com questions 80134 christmas light route efficiency我问 我意识到我需要一种算法来解决路由检查问题 h
  • 在 RStudio 控制台中显示西里尔字母

    我在 Rstudio 控制台中显示俄语字符时遇到问题 我使用 readxl 包加载带有俄语的 Excel 文件 西里尔字母在数据框中正确显示 但是 如果我运行一个输出包含变量名称的函数 RStudio 控制台将显示符号而不是正确的西里尔字符
  • 为闪亮的应用程序创建桌面图标

    当我在基本 R 提示中提供以下代码时 我会在浏览器中打开一个闪亮的应用程序 shiny runApp C Myapp 我使用 Windows 7 我试图创建一个桌面图标 以避免我的客户每次想要使用该应用程序时都键入上述代码 我创建了一个桌面
  • corr.test 与 cor.test p 值

    我正在尝试使用 psych 包 psych 1 6 9 中的 corr test 但在使用 method spearman 时 它似乎给出了与 cor test 不同的 p 值 相关系数相同 但 p 值不同 我整理了一些示例代码和输出 如下
  • R 中整数向量的大小

    我原以为 R 有一个用于存储对象的标准开销 看起来是 24 字节 至少对于整数向量而言 但一个简单的测试表明它比我意识到的要复杂 例如 采用长度为 100 的整数向量 使用随机采样 希望避免任何可能存在的偷偷摸摸的序列压缩技巧 https
  • 在 R 绘图上使用鼠标书写?

    我使用创建了散点图plot R 中的函数 有没有可能在这个图上画图 我想添加一条直线并获取它的参数 但在我看来abline 可能会很不方便 我想画很多条线 然后选择一条最合适的 我怎样才能完成这个任务 看看 RStudio 和这个例子 li
  • 如何在 R 中使用 msgbox [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在中显示消息框R 我正在寻找类似的东西msgbox在 VBA 中 因此我可以向用户发出有关问题的警报 此外 我想允许一些用户交互 例如
  • 整理包中的字段说明

    我很抱歉 因为我知道这个答案可能出现在编写 R 包的手册中 但在我阅读和查看其他包的整理字段时 我无法 100 弄清楚该字段的用途 用简单的语言 我的是英语 来看 包的描述文件中的整理字段有什么作用 人们想在那里放什么 我认为这来自于某个时
  • 如何将变量传递给 ddply 中的自定义函数?

    考虑以下数据 d data frame experiment as factor c foo foo foo bar bar si runif 5 ti runif 5 我想进行相关性测试si and ti 对于每个experiment因素
  • 在 R 中高效加载稀疏矩阵

    我在将数据有效加载到 R 中的稀疏矩阵格式时遇到问题 这是我当前策略的 不完整 示例 library Matrix a1 Matrix 0 5000 100000 sparse T for i in 1 5000 a1 i idxOfCol
  • R/ggplot2:如何匹配重叠区域图中的图例和绘图颜色?

    我有两个面积图 称为 蓝色 和 绿色 其中green大部分是在blue情节 但在极少数点上 它高于blue阴谋 我想使用透明度说alpha 0 2对于两者 并且还能够为每个指定颜色 我现在的问题是 自从green情节主要是在blue地块 其
  • R 中的频率加权,与 Stata 的结果比较

    我正在尝试分析明尼苏达大学 IPUMS 数据集中的数据1990 年美国人口普查 http usa ipums org usa sampdesc shtml us1990a in R 我正在使用survey http faculty wash
  • 用于检查和批量线性模型的数据表选项

    我想知道是否有data table用于从数据集中批量处理线性模型并首先进行检查的选项 我需要对每个唯一标识符运行一堆线性模型 但首先我需要进行检查 对于每个唯一的 id 和年份 我需要检查是否有至少 24 个月的先前每月数据 但不超过 60
  • 修改x轴刻度标签

    我正在尝试更改由生成的箱线图的 x 轴刻度标签ggplot2 x 轴是一个分类变量 HabFac 我想要的是将其刻度更改为 6 个化学品 A E 下面是我的代码 raw data read table Read data p TT ggpl

随机推荐

  • D3.js中的selection.style和selection.attr有什么区别?

    我发现它们在我的测试中都有效 on mouseover function d3 select this select text style fill red or on mouseover function d3 select this s
  • Flutter Dart HTTP POST 请求正文在服务器端为空

    我正在开发 Flutter 平板电脑应用程序 一旦输入一个输入字段 我就会尝试向服务器发送一个发布请求 以下是我为此调用的方法 Future lt http Response gt postRequest async print globa
  • 在环境变量中设置额外的主机

    我正在使用 docker compose 来运行我的应用程序 为此 我需要在容器内设置主机 这取决于我正在运行的环境 我的方法是 创建环境文件并设置变量 application env SERVER IP 10 10 9 134 我的 do
  • 发出拉取请求后,Jenkins 将禁用分支上的项目构建

    注意 我只在我的一个分支中设置了 Jenkinsfile 而不是在主分支中设置 我已经设置了 Git webhooks 来监视推送到我的 Github 存储库的事件 但是 我注意到我的 Jenkins 构建作为分支工作正常 拾取推送事件 触
  • 从 SQL 表中选择行的百分比?

    我有一个带有 PHP 脚本的网站 该脚本内部有一个 SQL 查询 返回由 JavaScript 文件访问的数据 该数据是一个巨大的航班数据列表 我需要能够随机选择 比方说 任何指定日期的总航班数的 40 为了论证起见 让我们这样说 quer
  • 指针可以指向它自己吗?

    我的问题是 如果指针变量的地址与其值相同 那么它真的指向自身吗 例如 在下面的代码中 是a指向自身的指针 include
  • 熊猫的分层抽样

    我看过Sklearn 分层抽样文档 http scikit learn org stable modules generated sklearn model selection train test split html以及熊猫文档 htt
  • 对象方法的匿名函数[重复]

    这个问题在这里已经有答案了 可能的重复 直接调用分配给对象属性的闭包 https stackoverflow com questions 4535330 calling closure assigned to object property
  • 基于 C# 套接字的 HTTP

    我正在尝试通过 C 套接字发送 HTTP 请求并从服务器接收响应 而且我是这种语言的新手 我写了以下代码 IP解析正确 IPEndPoint RHost new IPEndPoint IP Port Socket socket new So
  • Windows命令行重定向下的c ++换行符

    我发现 Windows 命令行重定向会自动将 n 替换为 r n 有什么方法可以避免这种情况吗 因为在 stdout 或 stderr 重定向之后 如果将 r n 写入控制台 您将得到 r r n 而不是 r n 多谢 你可以尝试一个简单的
  • Visual Studio 中使用的 JavaScript 参考语法是什么?

    在 Visual Studio 2012 中 我创建了一个 Web 应用程序 然后在默认值中找到了以下行 references js项目附带的脚本
  • 为什么没有 boost::intrusive::map ?

    升压文档 http www boost org doc libs 1 55 0 doc html intrusive html http www boost org doc libs 1 55 0 doc html intrusive ht
  • OpenCV:加载带有 alpha 通道但 8 位深度的图像

    我对这些标志有点困惑cv imread takes 我的目标是加载具有 alpha 通道的图像 即CV 8UC4 同时我想始终以 8 位深度加载它们 首先我尝试使用以下内容 cv imread path cv IMREAD COLOR 这会
  • 如何设置文本区域滚动条的样式

    我在联系表单中有一个使用 css 样式的文本区域 它看起来很棒 直到我写的内容超出了该区域可以容纳的范围 当我这样做时 会出现一个滚动条 并且这个滚动条在我的深色样式中看起来很糟糕 它是黑底白字 文本 那么我该如何设计这个呢 我用谷歌搜索了
  • 在 Android .aar 库中重新打包 .jar-s

    源代码 Library https bitbucket org victorapoyan renamingpackagedependency 使用库的项目 https bitbucket org victorapoyan renamingp
  • Ember 升级中的 JQueryUI

    按照建议升级并关闭 Bower 后 有没有办法在不使用 Bower 的情况下将 JQueryUI 包含到 Ember 项目中 我的项目很大程度上依赖于 JQueryUI 对话框 ember v ember cli 3 3 0 node 8
  • 如何在 JavaScript 调试终端中运行 VSCode 任务?

    我希望 VSCode 运行此任务 label Start type shell command npm run start dependsOn Set Envs problemMatcher presentation group Main
  • 如何从 golang 中的 http 请求中读取标头?

    如果我收到类型的请求http Request 如何读取特定标头的值 在本例中 我想从请求标头中提取 jwt 令牌的值 您可以使用r Header Get https golang org pkg net http Header Get fu
  • 输入字段中的字符限制为字母和数字

    我希望尝试在我的网站上订阅的人输入昵称 并且该昵称应仅由字母和数字组成 根本没有特殊字符 我想要以下内容 abcdefghijklmnopqrstuvwxyz1234567890 only 我如何检查它是否只有这些 HTML5 解决方案将是
  • deparse(substitute()) 正常返回函数名称,但在 for 循环内调用时返回函数代码

    我对 R 在一个非常具体的情况下的行为感到有点惊讶 假设我定义了一个函数square返回其参数的平方 如下所示 square lt function x return x 2 我想在另一个函数中调用这个函数 并且我还想在这样做时显示它的名称