使用以编程方式构造的公式有什么陷阱吗?

2023-11-25

我想要遍历一个潜在解释变量的长向量, 依次对每个变量回归响应变量。而不是粘贴在一起 模型公式,我正在考虑使用reformulate(), 如此处所示.

功能fun()下面似乎可以完成工作,拟合所需的模型。但请注意, 它在其调用元素中记录name构造的公式对象的 而不是它的value.

## (1) Function using programmatically constructed formula
fun <- function(XX) {
    ff <- reformulate(response="mpg", termlabels=XX)
    lm(ff, data=mtcars)
}
fun(XX=c("cyl", "disp"))
# 
# Call:
# lm(formula = ff, data = mtcars)                 <<<--- Note recorded call
# 
# Coefficients:
# (Intercept)          cyl         disp  
#    34.66099     -1.58728     -0.02058  

## (2) Result of directly specified formula (just for purposes of comparison)
lm(mpg ~ cyl + disp, data=mtcars)
# 
# Call:
# lm(formula = mpg ~ cyl + disp, data = mtcars)   <<<--- Note recorded call
# 
# Coefficients:
# (Intercept)          cyl         disp  
#    34.66099     -1.58728     -0.02058  

我的问题:这有什么危险吗?这能成为一个 例如,如果我想稍后申请,就会出现问题update, or predict或者 模型拟合对象的一些其他功能(可能来自其他环境)?

一个稍微尴尬的替代方案,不过,确实得到了记录 调用权是使用eval(substitute())。这是否是一种总体上更安全的结构?

fun2 <- function(XX) {
    ff <- reformulate(response="mpg", termlabels=XX)
    eval(substitute(lm(FF, data=mtcars), list(FF=ff)))
}
fun2(XX=c("cyl", "disp"))$call
## lm(formula = mpg ~ cyl + disp, data = mtcars)

我总是犹豫是否要承认有no涉及 R 环境和范围界定的某些情况可能会产生影响,但是......经过更多探索后,我上面的第一次使用看起来确实安全.

事实证明,打印出来的电话有点转移注意力。

公式为actually被其他函数使用(以及由formula() and as.formula()) 是存储在terms适合对象的元素,以及it得到正确的实际公式。 (这terms元素包含类的对象"terms",这只是一个"formula"带有一堆附加属性。)

看到我的问题中的所有提案和相关评论都存储相同的"formula"对象(取决于关联的环境),运行以下命令。

## First the three approaches in my post
formula(fun(XX=c("cyl", "disp")))
# mpg ~ cyl + disp
# <environment: 0x026d2b7c>

formula(lm(mpg ~ cyl + disp, data=mtcars))
# mpg ~ cyl + disp

formula(fun2(XX=c("cyl", "disp"))$call)
# mpg ~ cyl + disp
# <environment: 0x02c4ce2c>

## Then Gabor Grothendieck's idea
XX = c("cyl", "disp")
ff <- reformulate(response="mpg", termlabels=XX)
formula(do.call("lm", list(ff, quote(mtcars))))  
## mpg ~ cyl + disp

为了确认formula()实际上是从terms适合对象的元素,看看stats:::formula.lm and stats:::formula.terms.

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

使用以编程方式构造的公式有什么陷阱吗? 的相关文章

  • 将 data.frame 的列中的值替换为另一个 data.frame 中的值

    我的情况是 我有一个数据框 其中有一列填充了整数 1 到 6 我想用更具描述性的标签替换这些整数 这些标签在另一个充当 键 的数据框中提供 V1 V2 1 1 LABEL1 2 2 LABEL2 3 3 LABEL3 4 4 LABEL4
  • 计算级别内的值

    我在 R 中生成了一组级别cut 例如假设 0 到 1 之间的小数值 分为 0 1 个区间 gt frac lt cut c 0 1 breaks 10 gt levels frac 1 0 001 0 1 0 1 0 2 0 2 0 3
  • 在 for 循环中绘制的多个 ggplot2 绘图的网格

    作为一个新的 ggplot2 用户 我对可能性的数量感到有点迷失 并且很难在网上找到我认为简单问题的简单答案 我想在同一张纸上显示 ggplot2 的多个图 但知道这些图来自 for 循环 以下示例无法编译 仅用于说明 for i in c
  • 尽管提供了群落矩阵,纯素食 DBRDA 物种得分为空

    我使用纯素社区生态包在 R 中执行了 基于距离的冗余分析 dbRDA 我想在 dbRDA 结果的排序图中显示 鱼类 营养群体对样本之间差异 营养级鱼类组合的丰度数据 的相对贡献 IE 将箭头和营养级组名称叠加到排序图上 其中箭头线的长度表示
  • profvis() 何时以及为何显示“源不可用”?

    我经常分析 R 代码 并大量使用 profvis 对于某些函数 浏览器窗口的上半部分会显示源代码 有时则不会 我不知道什么时候会出现这种情况 对我来说这似乎是随机的 有谁知道 profvis 何时以及为什么无法在顶部窗口中显示代码 发生这种
  • glm() 模型的交叉验证

    我正在尝试对我之前在 R 中构建的一些 glm 模型进行 10 倍交叉验证 我对cv glm 函数在boot包 尽管我已经阅读了很多帮助文件 当我提供以下公式时 library boot cv glm data glmfit K 10 这里
  • udunits2 R 安装:找不到 udunits2.h

    我正在尝试在 R 中安装 udunits2 以满足对ggforce包裹 但是 安装程序在检查 udunits2 时始终失败 我已经尝试过中的说明this https stackoverflow com questions 47059517
  • 使用 ggplotly(ggplot2 withplotly)时可以去掉注释中的跟踪标签吗?

    使用ggplotly时是否可以删除注释中的跟踪标签 例如 library ggplot2 library plotly g lt ggplot iris aes Sepal Width Sepal Length geom point ann
  • 如何判断某个软件包是否已经安装?

    当我安装 yaml 包时 如果之前已经安装过 RStudio 则会弹出一条烦人的错误消息 如何判断该软件包是否已安装 以便我可以在代码中决定是否安装该软件包 该消息位于弹出窗口中 内容如下 此安装将更新的一个或多个软件包 当前已加载 在更新
  • r Shiny 中的 fileInput 函数没有响应

    我是 R 和 R闪亮的新手 一直致力于构建一个统计应用程序 该应用程序将允许用户导入文件 然后对数据运行不同的统计程序 直到最近 fileData 函数一直对我来说运行良好 现在每当我尝试上传文件时 都不会打开任何内容 我已尝试了所有我能想
  • R 条形图中的 X 轴

    我想问一个关于 barplot 轴的问题 首先请看我的数据 SerNo DOY Rain 1 350 0 2 351 0 3 352 0 4 353 0 5 354 0 6 355 0 7 356 0 8 357 0 9 358 0 10
  • R:在函数中包含循环?

    以下代码可用于创建一个 data frame 其中 Kendall Tau 和 Spearman 相关结果彼此相邻 data mtcars mtcars correlation lt function x y df1 cor data fr
  • 在 R 中修改传单弹出窗口

    我想修改 R 中传单弹出窗口的外观 帮助文件指出 in the popupOptions 函数需要 传递给底层 Javascript 对象构造函数的额外选项 In 这个例子 https rstudio github io leaflet p
  • 我可以调整scale_color_brewer的下限吗?

    我已经订购了我想使用 color Brewer 的分类数据 但我很难看到非常低的值 有没有办法去掉这些较低的值或设置范围的下限 ggplot data frame x 1 6 y 10 15 w letters 1 6 aes x y co
  • R 中带有边缘箱线图的直方图

    如何使直方图中的 X 轴与边缘箱线图匹配 data lt rnorm 1000 nf lt layout mat matrix c 1 2 2 1 byrow TRUE height c 1 3 layout show nf par mar
  • 在 R Shiny 中显示/隐藏整个框元素

    我目前正在尝试找到一种方法来隐藏 显示 R Shiny 中的整个 box 元素 以及里面的所有内容 我想创建一个可能的按钮 它允许用户展开特定框 然后使用相同 甚至不同 的按钮隐藏它 我不想使用条件面板 因为我的应用程序非常大并且会产生一些
  • 在 ggplot 中过滤管道 df

    我正在使用 dplyr 管道来清理我的 df 然后直接输入到 ggplot 中 但是 我只想一次只绘制一组 因此我需要过滤到该组 问题是 我希望比例保持不变 就好像所有群体都存在一样 是否可以在 ggplot 命令中进一步过滤管道 df 例
  • 通过 r 中的组变量进行汇总

    我有一个数据框如下 head newStormObject FATALITIES INJURIES PROPVALDMG CROPVALDMG EVTYPE total 1 0 15 2 5e 05 0 TORNADO 15 2 0 0 2
  • R 在安装包依赖项时不考虑最大版本

    假设我正在开发一个名为magicr做一些统计魔术 我希望它使用另一个名为的包中的函数fairydust 假设 存在于 CRAN 上 很遗憾fairydust刚刚向 CRAN 发布了 2 0 0 版本 完全破坏了我计划使用的功能 所以我更新了
  • R - 如何为数据范围内的缺失值绘制条形图零点?

    假设我对 1 到 10 之间的整数的 200 个点有 10 个观察值 mysample sample rep seq 1 10 20 10 我想用条形图绘制它 barplot table mysample barplot https i s

随机推荐

  • 如何在字典理解中使用 if/else?

    Python 2 7 中是否存在一种方法可以制作如下内容 something if true if condition else something if false for key value in dict items 我知道你可以用
  • 设置 JAR 文件的类路径

    我最近刚刚使用 Eclipse 创建了 Java 项目 需要 2 个 JAR 文件 phiget21 jar 和 mysql jar 在 Eclipse 中运行程序时一切正常 并且我注意到 jar 文件保存在 lib 文件夹中 我很快就要将
  • DB2 MERGE 语句错误

    我尝试了以下几种变体 但仍然出现错误 有什么方法可以解决这个问题 DB2 10 1 用于 z OS V10 的 DB2 对于以下 MERGE INTO TRGT t USING SRC s ON t ACCTID s ACCTID AND
  • Swift 的 if let 是如何评估的?

    我在 Swift 网站和这里的各种帖子上看到了这段代码 我正在尝试掌握基础知识 这条线如何评价 if let name optionalName 我很困惑 因为它不是 name 可选名称 它正在分配值 那么它如何报告 true 和 当你用
  • 限制在给定时间开放的承诺数量

    以下 TypeScript 执行每个调用doSomething action 一次一个 这意味着列表中的第二项在第一项完成之前不会被调用 async performActionsOneAtATime for let action of li
  • 离线网络应用程序。如何存储数据?

    介绍 应用程序必须能够完全离线运行 在本地存储数据并在有互联网连接时通过 AJAX 将其发布到网上 这可能是几天后 问题 如何使用Javascript存储数据 补充笔记 我不想使用任何服务器端技术 它必须像数据库一样安全 我读过有关 coo
  • Rails:在 Rails 中使用带有 has_one 关联的构建

    在这个例子中 我创建了一个user没有profile 然后稍后创建一个profile对于该用户 我尝试使用构建has one协会但是爆炸了 我看到这个工作的唯一方法是使用has many The user应该最多只有一个profile 我一
  • 选项 和 for 理解

    我正在编写一个用于理解的代码 并且想知道一些事情 def updateUserStats user User Either Error User for stampleCount lt stampleRepository getStampl
  • Android重复提供者权限问题

    我们正在尝试发布一款休闲应用程序的付费无广告版本 该应用程序目前免费发布但带有广告 我们将所有包名称重构为com mycompanyname appname pro 市场上的免费版基本上没有 pro结尾 我们还进入了内容提供商并将权限更改为
  • 查找数据库上打开的连接数

    我的 Web 应用程序位于 asp net 2 0 c 2 0 和 sql server 208 中 我如何找到 sql server 2008 数据库上的打开连接数 有没有办法清除连接池 因为我的网站托管在共享主机上他们提供了有限的联系
  • Yii2:如何自定义 404 和 503 等错误页面

    我有以下 errorHandler 配置 errorHandler gt errorAction gt page error 在控制器页面中 在我想检查的操作错误中 我收到 404 错误 找不到页面 我怎样才能检查它 如果您正在尝试自定义E
  • 字符串文字存储在哪里,我可以修改它们吗?

    我对 C 中的字符串文字有几个问题 char strPtr Hello char strArray Hello Now strPtr and strArray被认为是字符串文字 根据我的理解 字符串文字存储在只读内存中 因此我们无法修改它们
  • Apiary.io - 具有不同参数的多个响应 (200)

    我试图通过不同的参数获得不同的响应 但有些东西不起作用 这是我的 API Question questions question id A Question object has the following attributes Param
  • 使用自定义表示在 Scala 中对 ADT 进行通用派生

    我正在转述来自 circe Gitter 频道的问题 here 假设我有一个 Scala 密封特征层次结构 或 ADT 如下所示 sealed trait Item case class Cake flavor String height
  • 将 JSON 反序列化为 JAVASCRIPT 对象 [重复]

    这个问题在这里已经有答案了 我有一个将 JSON 文本反序列化为 javascript 对象的问题 我测试了 jquery 和 yui 库 我有这个类 function Identifier name contextId this name
  • 获取操作系统级别的系统信息

    我目前正在构建一个 Java 应用程序 该应用程序最终可以在许多不同的平台上运行 但主要是 Solaris Linux 和 Windows 的变体 有没有人能够成功提取底层操作系统中当前使用的磁盘空间 CPU 利用率和内存等信息 Java
  • 以 y_true 取决于 y_pred 的方式自定义 Keras 的损失函数

    我正在研究多标签分类器 我有许多输出标签 1 0 0 1 其中 1 表示输入属于该标签 0 表示否则 就我而言 我使用的损失函数是基于 MSE 的 我想改变损失函数 当输出标签为 1时 它会改变为该标签的预测概率 检查附图以更好地理解我的意
  • Numpy int 数组:查找多个目标整数的索引

    我有一个大的 numpy 数组 dtype int 和我想在该数组中找到的一组数字 例如 import numpy as np values np array 1 2 3 1 2 4 5 6 3 2 1 searchvals 3 1 res
  • R 标识符号更改之前的行

    我有一个向量 df lt c 5 9 8 7 1 如何识别标志变化之前的位置 IEdf 2 这很简单 如果你了解的话sign功能 which diff sign df 0 1 2
  • 使用以编程方式构造的公式有什么陷阱吗?

    我想要遍历一个潜在解释变量的长向量 依次对每个变量回归响应变量 而不是粘贴在一起 模型公式 我正在考虑使用reformulate 如此处所示 功能fun 下面似乎可以完成工作 拟合所需的模型 但请注意 它在其调用元素中记录name构造的公式