有没有比字符串操作更好的替代方案来以编程方式构建公式?

2023-11-21

其他人的函数似乎都采用公式对象,然后在内心深处对它们进行黑暗魔法,我很嫉妒。

我正在编写一个适合多个模型的函数。这些模型的部分公式保持不变,部分公式从一个模型到下一个模型有所变化。笨拙的方法是让用户将公式部分作为字符串输入,对它们进行一些字符操作,然后使用as.formula.

但在走这条路之前,我只是想确保我没有忽略一些更简洁的方法,该方法允许函数接受标准 R 格式的公式(例如从其他使用公式的对象中提取的公式)。

我想要像...

> LHS <- y~1; RHS <- ~a+b; c(LHS,RHS);
y ~ a + b
> RHS2 <- ~c;
> c(LHS, RHS, RHS2);
y ~ a + b + c

or...

> LHS + RHS;
y ~ a + b
> LHS + RHS + RHS2;
y ~ a + b + c

...但不幸的是这两种语法都不起作用。有人知道是否有什么可以做到的吗?谢谢。


reformulate会做你想做的事。

reformulate(termlabels = c('x','z'), response = 'y')
## y ~ x + z

或者没有拦截

reformulate(termlabels = c('x','z'), response = 'y', intercept = FALSE)
## y ~ x + z - 1

请注意,您不能构造具有多个的公式reponses例如x+y ~z+b

reformulate(termlabels = c('x','y'), response = c('z','b'))
z ~ x + y

从现有的术语中提取术语formula(给出你的例子)

attr(terms(RHS), 'term.labels')
## [1] "a" "b"

获得响应略有不同,这是一种简单的方法(对于单个变量响应)。

as.character(LHS)[2]
## [1] 'y'


combine_formula <- function(LHS, RHS){
  .terms <- lapply(RHS, terms)
  new_terms <- unique(unlist(lapply(.terms, attr, which = 'term.labels')))
  response <- as.character(LHS)[2]

  reformulate(new_terms, response)


}


combine_formula(LHS, list(RHS, RHS2))

## y ~ a + b + c
## <environment: 0x577fb908>

我认为将响应指定为字符向量会更明智,例如

combine_formula2 <- function(response, RHS, intercept = TRUE){
  .terms <- lapply(RHS, terms)
  new_terms <- unique(unlist(lapply(.terms, attr, which = 'term.labels')))
  response <- as.character(LHS)[2]

  reformulate(new_terms, response, intercept)


}
combine_formula2('y', list(RHS, RHS2))

你还可以定义一个+使用公式的运算符(更新为公式对象设置新方法)

`+.formula` <- function(e1,e2){
  .terms <- lapply(c(e1,e2), terms)
  reformulate(unique(unlist(lapply(.terms, attr, which = 'term.labels'))))
}

RHS + RHS2
## ~a + b + c

您还可以使用update.formula using .明智地

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

有没有比字符串操作更好的替代方案来以编程方式构建公式? 的相关文章

  • R foreach问题(某些进程返回NULL)

    我遇到了问题foreach我正在 R 中使用的程序的一部分 该程序用于运行不同参数的模拟 然后将结果返回到单个列表 然后用于生成报告 当并非所有分配的模拟运行都在报告上实际可见时 就会出现问题 从各方面来看 似乎只有分配的运行的一个子集实际
  • 如何删除箱线图上的刻度线

    我试图从箱线图中删除 x 轴刻度线 但保留与刻度线关联的标签 这在基础 R 中可能吗 colors lt c lightskyblue3 gray78 gold1 wheat1 boxplot avgscore module data mi
  • 纵向序列数据的三次样条方法?

    我有一个串行数据 格式如下 time milk Animal ID 30 25 6 1 31 27 2 1 32 24 4 1 33 17 4 1 34 33 6 1 35 25 4 1 33 29 4 2 34 25 4 2 35 24
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o
  • 如何在 R 或 Python 中制作旭日图?

    到目前为止 我一直无法找到一个可以创建旭日图的 R 库约翰 斯塔斯科 http www cc gatech edu gvu ii sunburst 有人知道如何在 R 或 Python 中实现这一点吗 在极坐标投影中使用 matplotli
  • 如何从 R 中的 txt 文件读取矩阵?

    我有一个带有矩阵的txt文件 Matrix txt 重要 数字之间没有空格 0100 1001 1100 我想在 R 中将其作为矩阵读取 我该怎么做 我尝试使用 as matrix read table Matrix txt sep 但失败
  • 如何绘制具有显着性水平的箱线图?

    前段时间问了一个关于绘制箱线图的问题Link1 https stackoverflow com questions 14604439 plot multiple boxplot in one graph 我有一些包含 3 个不同组 或标签
  • 如何将plot中的单变量列表图表转换为ggplot2格式?

    我正在搜索 但仍然找不到一个非常简单的问题的答案 我们如何使用 R 中的 ggplot2 生成一个变量的简单线图 我正在分析时间序列数据 并且想要对图表进行更复杂的操作 我认为如果我使用 ggplot2 代替会更好plot It works

随机推荐

  • MYSQL根据列数据和表名连接表

    我想知道这是否可能 我想根据表1的数据连接2个表 示例表 1 具有列 food 其数据为 hotdog 我有一张桌子叫热狗 是否可以进行 JOIN 之类的操作 SELECT FROM table1 t join t food on id f
  • DDD:聚合根

    我需要帮助来找到我的聚合根和边界 我有 3 个实体 计划 计划角色和计划培训 每个计划可以包含许多 PlannedRoles 和 PlannedTrainings 解决方案 1 起初我认为 Plan 是聚合根 因为脱离 Plan 的上下文
  • vim 中使用 powershell 的 system()

    我正在尝试在 Vim 中编写一个简单的函数来返回 powershell 命令的结果 不过 我的结果总是乱七八糟 我认为这可能是一个编码问题 但正如您所看到的 这个问题很奇怪 因为它 有点有效 但我没有任何解决问题的办法 在 vim 中设置以
  • 警报对话框或自定义警报对话框的大小

    我正在为 10 1 的所有平板电脑创建应用程序 现在我正在三星 Galaxy 选项卡上尝试此操作 我已经完成了所有部分 但关于平板电脑尺寸的警报对话框太小 我还创建了自定义警报对话框 但看起来不太好 那么告诉我我可以更改默认警报对话框的大小
  • 当 AutoGenerateColumns 设置为 True 时,如何停止在 DataGrid 中生成特定列?

    我已将 ObservableCollection 绑定到DataGrid并设置AutoGenerateColumns在具有 MVVM 应用程序的 WPF 中为 true 那我该怎么办stop a specific column要出现在 Da
  • 如何在 C# 中每隔几秒调用一个特定方法?

    机器人游戏 是我开发的第一个基础游戏 洋红色 角色是敌人 它应该在这张地图中随机移动 但它的随机移动太快 我尝试使用线程 但它会影响所有角色的速度 现在 我需要每 100 毫秒调用一次 Enemy 方法 Robot game Image 您
  • 如果我在存储过程中有多个 select 语句,如何使用 SqlDataReader

    我在 Microsoft SQL Server 2005 的存储过程中编写了三个 select 语句 两个 select 语句都返回多个记录 并且 select 语句的表列表不同 一个从主表中选择记录 另一个从子表中选择记录 在 C 代码中
  • 我该如何写上标文字?

    我有一个应用程序 其中包含大量上标数字或字母 我注意到 X span 3 span and just using sup tag around the figure 3 both yield X3 in my app But only th
  • 更改 ListView 背景 - 奇怪的行为

    我在更改 ListView 中视图的背景时遇到问题 我需要的 onClick 更改一行的背景图片 实际发生的情况 按下例如后 背景会发生变化 选择 第一个条目 但向下滚动后 第 8 个条目也被选中 滚动回到顶部 第一个不再被选择 现在选择第
  • 如何为ASP.NET身份设置密码规则?

    在我的 ASP NET 应用程序中 我在 web config 的 DefaultMembershipProvider 和 SqlMembershipProvider 中有以下设置 enablePasswordRetrieval true
  • 有符号整数溢出在 C++ 中仍然是未定义的行为吗?

    据我们所知 有符号整数溢出是未定义的行为 但C 11中有一些有趣的东西cstdint文档 有符号整数类型 宽度分别为 8 16 32 和 64 位 没有填充位 使用 2 的补码表示负值 仅当实现直接支持该类型时提供 See link 这是我
  • Java(JAXP)DocumentBuilder的XML解析差异

    之间有什么区别吗 DocumentBuilder parse InputStream and DocumentBuilder parse InputSource 我只能发现 对于第一种情况 解析器从流中检测编码 因此它更安全 而在后者中我不
  • 如何在后台使用 Flutter Method Channel(应用程序最小化/关闭)

    我正在 Flutter 应用程序中开发原生 Android 小部件 其中有刷新按钮 单击该按钮时我必须调用 Flutter 代码中的方法 我使用 Flutter Method Channel 进行通信 当应用程序位于前台时它工作正常 但当应
  • 无需 gcloud 客户端即可访问 google 容器注册表

    我有一个 CoreOS docker 主机 我想在其上开始运行容器 但是当尝试使用 docker 命令从 google 容器私有注册表中获取映像时 https cloud google com tools container registr
  • 在 Common Lisp 中,如何定义通用数据类型说明符(如整数列表)?

    我想定义一个类型说明符来描述相同类型的事物列表 所以我想有 list of integer 如同 array integer 这是内置的 我可以为特定类型创建它 如下所示 defun elements are integer seq eve
  • Moshi 判断 JSON 是数组还是单个对象

    有没有办法设置 Moshiadapter自动创建一个Object or List基于 JSON 响应 目前 我可以明确地做到这一点 例如 我可以收到以下回复 userId 1 id 2 body body title title Or us
  • 通过反射订阅任何事件类型的操作

    考虑 someControl Click delegate Foo 该事件的论点是无关紧要的 我不需要它们 我对它们不感兴趣 我只想调用 Foo 没有明显的方法可以通过反射来做同样的事情 我想将上面的内容翻译成类似的内容 void Foo
  • Servlet 过滤器包装器 - 更改内容类型时遇到问题

    我有 RESTful Web 服务 由 javascript 使用 该服务返回 application json 内容类型 但是 对于 IE 内容类型必须是 text html 因此 我编写了一个过滤器和包装器 以在检测到 IE 作为客户端
  • 链接器找不到符号,但已读取库并且符号存在

    我一直在尝试编译我的项目 并且得到了undefined reference错误 例如 installertest cpp text 0x9d1 undefined reference to XmlRpcValue makeArray ins
  • 有没有比字符串操作更好的替代方案来以编程方式构建公式?

    其他人的函数似乎都采用公式对象 然后在内心深处对它们进行黑暗魔法 我很嫉妒 我正在编写一个适合多个模型的函数 这些模型的部分公式保持不变 部分公式从一个模型到下一个模型有所变化 笨拙的方法是让用户将公式部分作为字符串输入 对它们进行一些字符