R bquote 的反向行为

2024-01-25

bquote函数允许计算表达式中包含的部分.()称呼。例如,

a <- 2
b <- 100
bquote(.(2 * a) * x + .(log10(b)))

会回来

4 * x + 2

我想重写这个函数来评估除了里面的东西之外的所有东西.()称呼。这是期望的行为:

a <- 2
b <- 100
bquote(2 * a * .(x) + log10(b))

> 4 * x + 2

我明白,要做到这一点,我必须仔细检查抽象语法树 http://adv-r.had.co.nz/Expressions.html#structure-of-expressions并评估早午餐,无需.()调用它们,但我无法处理所有这些递归。

你能帮我写一个这样的函数吗?


subst将替换除 .(...) 和 中的变量之外的所有变量simplify函数将简化没有变量的子树——如果不需要简化,则省略简化部分。没有使用任何包。

subst <- function(e) {
   if (typeof(e) == "language") {
      if (identical(e[[1]], as.name("."))) e[[2]]
      else {
        if (length(e) > 1) e[-1] <- lapply(as.list(e[-1]), subst)
        e
      }
   } else {
      eval(e)
   }
}

simplify <- function(e) {
  if (typeof(e) == "language") {
     if (length(all.vars(e))) {
         if (length(e) > 1) {
           e[-1] <- lapply(as.list(e[-1]), simplify)
           e
         } else e
     } else eval(e)
  } else e
}

inverse_bquote <- function(x, SIMPLIFY = TRUE) {
   result <- subst(substitute(x))
   if (SIMPLIFY) simplify(result) else result
}

现在测试一下。

a <- 2
b <- 100

inverse_bquote(2 * a * .(x) + log10(b))
## 4 * x + 2

# without simplification

inverse_bquote(2 * a * .(x) + log10(b), SIMPLIFY = FALSE)
## 2 * 2 * x + log10(100)

Update:添加了简化。使其成为可选的。

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

R bquote 的反向行为 的相关文章

  • 从外部 gem 增强模型

    我在用着炼油厂CMS http refinerycms com 在我们的网站上让较少的技术人员更新内容 在 gem 内部 它们有一个 Page 类 用于映射站点上的每个顶级页面 我想在这个 Page 类上使用acts as taggable
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • ggplot 按因子和梯度颜色

    我正在尝试绘制一个对两个变量 一个因子和一个强度 进行着色的图 我希望每个因素都是不同的颜色 并且我希望强度是白色和该颜色之间的渐变 到目前为止 我已经使用了诸如对因子进行分面等技术 将颜色设置为两个变量之间的相互作用 并将颜色设置为因子并
  • ggplot:类似于scale_color_steps()的有序因子的色标

    With scale color steps 我们可以通过设置low和high争论 一个例子 df lt data frame x rnorm 99 y rnorm 99 col rnorm 99 ggplot df aes x y col
  • R 中舍入到下一个数量级的算法

    如果标题不清楚 我很抱歉 但我无法简洁地解释它 给定一个浓度向量 我想将最大值四舍五入到下一个数量级 即 345 到 1000 另外 我想将最小值四舍五入到较低的数量级 即 3 2 到 1 这些浓度也可能低于 1 因此例如 0 034 需要
  • e_facet 在 echarts4r 问题中使用分组数据

    我真的很喜欢这个包提供的可能性 并且想在一个闪亮的应用程序中使用它 然而我正在努力重新创建从 ggplot 到 echarts4r 的情节 library tidyverse library echarts4r data tibble ti
  • Rcpp 包不包含 Rcpp_precious_remove

    我一直在尝试创建数据库并安装 DBI 包 但仍然遇到此错误 我重新安装了 DBI 和 RSQLite 软件包 但它们似乎不起作用 library DBI con lt dbConnect RSQLite SQLite dbname memo
  • GLMER 警告:方差-协方差矩阵 [...] 不是正定的或包含 NA 值

    我有时发现我的 GLMM 来自glmer 包裹lme4 当调用其摘要时显示以下警告消息 Warning messages 1 In vcov merMod object use hessian use hessian variance co
  • 是否可以创建根据输入对象名称自行命名的列表?

    能够创建 R 列表对象而无需指定每个元素的名称对我来说非常有帮助 例如 a1 lt 1 a2 lt 20 a3 lt 1 20 b lt list a1 a2 a3 inherit name TRUE gt b a1 1 1 a2 1 20
  • 使用栅格包下载 SRTM 数据?

    我正在尝试使用 获取 SRTM 数据 raster R 中的包 但一旦我选择SRTM在 getData 命令中 我会收到以下错误 library raster srtm lt getData SRTM lon 16 lat 48 tryin
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • 如何一次执行多个 RSQLite 语句或如何转储整个文件?

    使用 RSQLite 构建 SQLite 数据库 我想一次发送多个语句 这可能吗 为什么要做这些not work sql lt readLines createtables sql dbSendQuery con sql 和 sql lt
  • R 单个变量中的多重图

    嗨 我有下一个代码 par mfrow c 1 3 plot BCxyz 1 BCxyz 2 main Bray Curtis 1 2 pch 20 cex 3 col c blue green red yellow Metadata Sa
  • 非等值连接 - 比较 R 中的两个数据帧

    我想根据第二个数据框中存在的值过滤数据框 例如 匹配第一个数据帧中 BP 列中高于 start pos 列的第一个值且小于 end pos 列或仅小于第二个数据中的 end pos 的行框架 我需要对第二个数据框中的所有值重复此过程 目前
  • 一起使用 R6 类和 foreach() %dopar% 的问题

    当与 foreach 一起使用时 我在 R6 类上遇到问题 可能与环境有关 我使用的是 Windows 假设有两个 R6 类 class1 和 class2 class1 中的 method1 依赖于 class2 例如 请参见下面的示例代
  • 如何在 nlme 与 lme4 中指定不同的随机效应?

    我想使用指定模型中的不同随机效应nlme lme 数据在底部 随机效应是 1 intercept and position变化超过subject 2 intercept变化超过comparison 这很简单 使用lme4 lmer lmer
  • 使用 ggplot2 和 geom_area 堆叠负/正时间序列

    我正在尝试重现一个堆积的时间序列图 该图显示银行资产负债表的构成和规模如何随时间变化 它应该看起来像这样 资产位于 x 轴上方 负债位于 x 轴下方 到目前为止 我已经能够使用以下方法成功重现图表的每一半ggplot plot assets
  • r - 如何在 normalizePath 中指定路径,或解决与其关联的此错误?

    我正在学习 R 并将其安装在我的办公室计算机上 我没有计算机的管理员权限 因为我什至必须致电IT人员进行安装 然后我安装一个包 一开始输入时不起作用 例如 install packages thepackage 错误信息是这样的 Error
  • 根据R中的行差异对行进行分组[重复]

    这个问题在这里已经有答案了 我有一组具有不同采样间隔的动物位置 我想要做的是采样间隔符合特定标准 例如低于特定值 的组和序列 让我用一些虚拟数据来说明 start lt Sys time timediff lt c rep 5 3 20 r
  • 如何使用 gvisMotionChart 处理 POSIXlt 格式时间?

    The googleVisR软件包出奇的好 然而 我对一个问题感到困惑gvisMotionChart关于 timevar 因为我的数据集中的时间是POSIXlt格式 例如 2009 07 02 19 00 00 2009 07 02 20

随机推荐

  • 检查子对象的地址是否位于包含对象的范围内是否合法

    2个问题 以下代码的格式是否符合定义的行为 是否有任何可能的 C 实现可以断言 代码 c 11 及更高版本 include
  • 授予路径权限

    我正在关注这个guide https gorails com setup windows 10 安装 ruby 除了当我尝试运行此命令时 一切都没有问题 Rails 新 myapp d mysql 我在其中遇到了这个错误 run bundl
  • 单击按钮时如何更新列表视图?

    public class MainActivity extends Activity ListView list String abc 1 2 3 MyCustomAdapter adapter Button refresh Overrid
  • 仅当对象是文字时才按语言过滤

    我写了以下查询 SELECT DISTINCT predicate object label WHERE VALUES subject
  • Phonegap 2.6 与 KeyboardShrinksView 和 HideKeyboardFormAccessoryBar

    我对 2 6 ios 中的新 PhoneGap 功能之一有疑问 最后他们包含了一个缩小 WebView 以处理固定元素的选项 不幸的是 结合HideKeyboardFormAccessoryBar选项设置为 true 会出现一个奇怪的白色条
  • IValueConverter 并绑定 DependencyObject

    我有一个ComboBox我需要做一个转换器SelectedItem 问题是IValueConverter需要绑定值 但也需要一个集合 配置了一个DependencyObject但它给了我一个错误消息 类型 System Windows Da
  • 当电影绘制到画布中时 Android 错误信号 11

    我正在开发一个 Android 应用程序 我试图在其中显示 GIF 图像 为此 我使用 Movie 类并创建了一个扩展 View 的类 GIFView 我从 Movie decodeFile 方法获取 Movie 实例 调用 Movie d
  • WiX 主要升级 Windows 服务,保留 .config,并避免重新启动

    我正在努力让 MajorUpgrade ServiceControl config 文件能够很好地协同工作 在我提出其他问题之后 https stackoverflow com questions 22770414 wix majorupg
  • git-shell - 新存储库

    我有一台专门的服务器git用户和存储库我正在尝试使用git shell method http git scm com book en Git on the Server Setting Up the Server让我的开发人员能够从事多个
  • 使用反向引用作为重复计数的正则表达式

    有什么方法可以构造一个按如下方式工作的正则表达式 将整数匹配为组1 然后匹配 1整数 This d s d 1 不幸的是 这是不允许的 但我发现它很好地描述了我想要实现的目标 你可以做这样的事情 var numbers 3 7 6 5 4
  • cakephp 从另一个助手中访问助手

    如何使用我构建的新帮助程序方法访问另一个帮助程序 例如 FormHelper class AppHelper extends Helper public function generateSpecialInput return this g
  • 通过shiny + rgl捕获坐标

    是否可以使用 recognize3d 或类似的方法来捕获通过渲染 Rglwidget 渲染的 rgl 场景中的地标坐标 我在闪亮中使用以下代码进行渲染 server observeEvent input mspec3D tt1 lt out
  • 在页面之间导航时闪烁

    当我在页面之间导航时 我的phonegap jquery 移动应用程序大部分时间都会闪烁 这是正常现象还是有解决办法 ui page webkit backface visibility hidden 这对我在phonegap jquery
  • 使用 openCv c++ 复制图像的一部分

    我正在使用 opencv 我想从另一个图像的一部分创建一个图像 我没有找到这样做的函数 所以我尝试实现我的想法 其中包括逐像素复制图像 但徒劳地我没有得到我正在等待的结果 任何人都有另一种想法 Code include cv h inclu
  • fullcalendar 无法读取未定义的属性“fn”

    我嵌入了fullcalendar min js到我的项目 但我收到此错误 错误日志显示 无法读取未定义的属性 fn 见下图 我检查了这个问题 建议使用jQuery 2 0 0 并且我肯定会使用jQuery v3 3 1 但无助于问题的解决
  • React Native RNFetchBlob 下载后获取文件的 URI

    我正在开发一个 React Native 项目 我现在想做的是下载并将下载的文件保存到设备上 我正在使用这个包 https www npmjs com package rn fetch blob https www npmjs com pa
  • Eclipse:将编辑器与内容类型相关联

    我可以根据内容类型而不是单个文件类型更改编辑器关联吗 如果我去Window gt Preferences gt General gt Editors gt File Associations 我看到基于文件扩展名的文件类型列表 例如 单击
  • 原型编程中对象和原型有什么区别?

    我试图理解创建和使用对象的 JavaScript 方式 但我认为我对对象和原型产生了误解 在我开始的一个新项目中 我决定尝试原型继承 我很困惑 这是否意味着我应该创建一个我打算使用的对象 然后基于该对象创建其他对象Object create
  • 使用 $inc 通过 Mongoose 增加文档属性

    我想增加views每次访问我的文档时都会加 1 到目前为止 我的代码是 Document find sort date 1 limit limit exec 哪里有 inc适合这里吗 从未使用过猫鼬 但快速查看文档here http mon
  • R bquote 的反向行为

    bquote函数允许计算表达式中包含的部分 称呼 例如 a lt 2 b lt 100 bquote 2 a x log10 b 会回来 4 x 2 我想重写这个函数来评估除了里面的东西之外的所有东西 称呼 这是期望的行为 a lt 2 b