在用户定义函数中使用 step() 时丢失对象错误

2024-01-08

5天了还是没有回复

  • 从西蒙的评论中可以看出,这是一个可重现且非常奇怪的问题。似乎只有当具有非常高预测能力的逐步回归被包装在函数中时才会出现这个问题。

我已经为此苦苦挣扎了一段时间,任何帮助将不胜感激。我正在尝试编写一个运行多个逐步回归并将其全部输出到列表的函数。但是,R 在读取我在函数参数中指定的数据集时遇到问题。我在各种板上发现了几个类似的错误(here http://www.mail-archive.com/r-help@r-project.org/msg75827.html, here https://stat.ethz.ch/pipermail/r-help/2009-February/188468.html, and here https://stackoverflow.com/questions/9161273/use-stepaic-on-a-list-of-models),但是这些问题似乎都没有得到解决。这一切都归结为在用户定义函数中调用 step() 时出现的一些奇怪问题。我正在使用以下脚本来测试我的代码。多次运行整个过程,直到出现错误(相信我,它会的):

test.df <- data.frame(a = sample(0:1, 100, rep = T),
                      b = as.factor(sample(0:5, 100, rep = T)),
                      c = runif(100, 0, 100),
                      d = rnorm(100, 50, 50))
test.df$b[10:100] <- test.df$a[10:100] #making sure that at least one of the variables has some predictive power

stepModel <- function(modeling.formula, dataset, outfile = NULL) {
  if (is.null(outfile) == FALSE){
    sink(file = outfile,
         append = TRUE, type = "output")
    print("")
    print("Models run at:")
    print(Sys.time())
  }
  model.initial <- glm(modeling.formula,
                       family = binomial,
                       data = dataset)
  model.stepwise1 <- step(model.initial, direction = "backward")
  model.stepwise2 <- step(model.stepwise1, scope = ~.^2)
  output <- list(modInitial = model.initial, modStep1 = model.stepwise1, modStep2 = model.stepwise2)
  sink()
  return(output)
}

blah <- stepModel(a~., dataset = test.df)

这将返回以下错误消息(如果错误没有立即显示,请继续重新运行 test.df 脚本以及对 stepModel() 的调用,它最终会显示):

Error in is.data.frame(data) : object 'dataset' not found

我确定一切都运行良好,直到 model.stepwise2 开始构建。不知何故,临时对象“数据集”对于第一个逐步回归工作得很好,但无法被第二个逐步回归识别。我通过注释掉部分函数发现了这一点,如下所示。此代码将运行良好,证明对象“数据集”最初被识别:

stepModel1 <- function(modeling.formula, dataset, outfile = NULL) {
  if (is.null(outfile) == FALSE){
    sink(file = outfile,
         append = TRUE, type = "output")
    print("")
    print("Models run at:")
    print(Sys.time())
  }
  model.initial <- glm(modeling.formula,
                       family = binomial,
                       data = dataset)
  model.stepwise1 <- step(model.initial, direction = "backward")
#   model.stepwise2 <- step(model.stepwise1, scope = ~.^2)
#   sink()
#   output <- list(modInitial = model.initial, modStep1 = model.stepwise1, modStep2 = model.stepwise2)
  return(model.stepwise1)
}

blah1 <- stepModel1(a~., dataset = test.df) 

EDIT- 在有人问之前,所有的summary()函数都在那里,因为完整的函数(我编辑了它,以便您可以专注于错误)有另一个部分,它定义了一个可以向其输出逐步跟踪的文件。我刚刚摆脱了他们

EDIT 2- 会话信息

会话信息() R版本2.15.1 (2012-06-22) 平台:x86_64-pc-mingw32/x64(64位)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] tcltk     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] sqldf_0.4-6.4         RSQLite.extfuns_0.0.1 RSQLite_0.11.3        chron_2.3-43         
 [5] gsubfn_0.6-5          proto_0.3-10          DBI_0.2-6             ggplot2_0.9.3.1      
 [9] caret_5.15-61         reshape2_1.2.2        lattice_0.20-6        foreach_1.4.0        
[13] cluster_1.14.2        plyr_1.8             

loaded via a namespace (and not attached):
 [1] codetools_0.2-8    colorspace_1.2-1   dichromat_2.0-0    digest_0.6.2       grid_2.15.1       
 [6] gtable_0.1.2       iterators_1.0.6    labeling_0.1       MASS_7.3-18        munsell_0.4       
[11] RColorBrewer_1.0-5 scales_0.2.3       stringr_0.6.2      tools_2.15

EDIT 3- 这执行与该函数相同的所有操作,只是不使用函数。即使算法没有收敛,这每次都会运行良好:

modeling.formula <- a~.
dataset <- test.df
outfile <- NULL
if (is.null(outfile) == FALSE){
  sink(file = outfile,
       append = TRUE, type = "output")
  print("")
  print("Models run at:")
  print(Sys.time())
}
  model.initial <- glm(modeling.formula,
                       family = binomial,
                       data = dataset)
  model.stepwise1 <- step(model.initial, direction = "backward")
  model.stepwise2 <- step(model.stepwise1, scope = ~.^2)
  output <- list(modInitial = model.initial, modStep1 = model.stepwise1, modStep2 = model.stepwise2)

Using do.call引用调用环境中的数据集对我有用。看https://stackoverflow.com/a/7668846/210673 https://stackoverflow.com/a/7668846/210673对于最初的建议。这是一个有效的版本(与sink代码已删除)。

stepModel2 <- function(modeling.formula, dataset) {
  model.initial <- do.call("glm", list(modeling.formula,
                       family = "binomial",
                       data = as.name(dataset)))
  model.stepwise1 <- step(model.initial, direction = "backward")
  model.stepwise2 <- step(model.stepwise1, scope = ~.^2)
  list(modInitial = model.initial, modStep1 = model.stepwise1, modStep2 = model.stepwise2)
}

blah <- stepModel2(a~., dataset = "test.df")

它对我来说始终失败set.seed(6)与原始代码。失败的原因是dataset变量不存在于step功能,虽然在制作时不需要它model.stepwise1,需要为model.stepwise2 when model.stepwise1保持线性项。当你的版本失败时就会出现这种情况。正如我在此处所做的那样,从全局环境调用数据集可以解决此问题。

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

在用户定义函数中使用 step() 时丢失对象错误 的相关文章

  • R闪亮的html小部件之间的交互

    我正在开发一个 R 闪亮应用程序 它使用多个 html 小部件 特别是网络D3 d3热图 and 和弦诊断 这些小部件单独工作正常 但是 在同一页面中使用它们会留下一个空格处他们应该在哪里 这是显示错误的可重现代码 在 UI 中注释绘图线
  • 反转默认比例梯度ggplot2

    我是新手 我正在尝试设计热图 这是我的代码 ggplot gd aes Qcountry Q6 1 Q6d order TRUE geom tile aes fill prob colour white theme minimal labs
  • 在 for 循环中绘制的多个 ggplot2 绘图的网格

    作为一个新的 ggplot2 用户 我对可能性的数量感到有点迷失 并且很难在网上找到我认为简单问题的简单答案 我想在同一张纸上显示 ggplot2 的多个图 但知道这些图来自 for 循环 以下示例无法编译 仅用于说明 for i in c
  • 如何从 data.frame 中选择行和列的子集

    我有这个 d d Age gt 2 它返回 Age 超过 2 的所有行 但我只想返回几列中的值 例如 d X 和 d Y 而不是全部 无论如何我可以做到这一点吗 Thanks d d Age gt 2 c X Y
  • R - 根据另一个数据框查找每组的重叠日期

    我有一个数据框 其中包含多个雨量计的降雨测量值 如下例所示 gt rnfl ID date value 1 250 2000 03 01 5 37 2 250 2000 03 02 0 00 3 250 2000 03 03 2 94 4
  • 有效地将环境从内部功能转移到全局环境

    我有一个在其中创建环境的函数 我希望将该环境分配给全局环境 目前我通过将环境分配给来做到这一点globalenv 作为最后一步 如下 funfun lt function inc 1 dataEnv lt new env dataEnv d
  • r Shiny 中的 fileInput 函数没有响应

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

    我正在尝试使用mclapply的功能parallel封装在R 该函数通过计算对数似然距离将值分配给序列矩阵 这是一个 CPU 密集型操作 所结果的system time价值观令人困惑 gt system time mclapply work
  • 按绝对值排序

    有谁知道如何按绝对值对 R 中的向量进行排序 所以 2 3 1 gt 1 2 3 etc 如果我在 python 中这样做 我会创建一对每个值及其符号 按绝对值对对列表进行排序 然后重新应用符号 但我对 R 很陌生 所以不知道如何执行此操作
  • 通过 RSelenium 单击按钮

    我正在尝试使用 Rselarium 和 Rvest 来抓取 REI 的评论 吊床 我想点击底部的按钮 x 次 这样我就可以抓取所有评论 我有点失落 这是我到目前为止所拥有的 如果您也知道如何在取景器中预览您正在做的事情 而不是屏幕打印 那就
  • 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:使用管道将单个参数传递到函数中的多个位置

    我试图专门使用管道来重写以下代码 使用babynames包中的babynames数据 library babynames library dplyr myDF lt babynames gt group by year gt summari
  • 如何在R中逐行写入文件

    我正在尝试逐行读取 csv 文件 并且仅选择左侧的第二个和第三个单元格以及右侧的第三个单元格 例如 如果这一行中有 17 个单元格 我将选取第 15 个单元格 然后我想合并这 3 个单元格 用逗号分隔 然后将此行写入一个新的 csv 文件
  • 在捕食者-被捕食者系统的生态建模中正确使用 deSolve

    我有一个捕食者 被捕食者模型 其中包含指定的参数和初始值 我在这里用两种方法求解微分方程 1 使用 for 循环 2 使用 deSolve 包 我相信 for 循环是正确的 并且应该给出如下图所示的输出 For loop attempt r
  • 如何在 Shiny 中动态渲染的 textInput 添加样式元素

    你好堆栈溢出 在我最近提出的问题中 我已经解决了一些与动态渲染 UI 元素相关的主要问题 并在一些了不起的人的帮助下动态创建了观察者 参见此处 动态渲染的 UI 如何在第二次运行时删除旧的反应变量 https stackoverflow c
  • 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
  • 在 Linux 下更改 RStudio 用户界面(不是图形等)中的字体大小

    This is not关于更改使用 RStudio 生成的图表中的字体大小的问题 我已经知道该怎么做了 我在配备 视网膜 显示屏的 MacBook Pro 上的 Linux 下使用 RStudio 我使用 KDE 作为我的窗口管理器 我可以
  • 在 R 中收集多组列[重复]

    这个问题在这里已经有答案了 我有一个宽数据框 需要将其收集或融化成一个高数据框 我遇到的问题是我有几组列需要保持关联 分组 我每个表单提交有 2 个用户 每个用户有 3 列数据 我想将这 6 列基本上以 3 组的形式堆叠起来 以便每个用户都
  • 求解非线性方程组

    我正在尝试求解以下四个方程组 我尝试过使用 rootSolve 包 但似乎我无法通过这种方式找到解决方案 我正在使用的代码如下 model lt function x F1 lt sqrt x 1 2 x 3 2 1 F2 lt sqrt
  • R 在安装包依赖项时不考虑最大版本

    假设我正在开发一个名为magicr做一些统计魔术 我希望它使用另一个名为的包中的函数fairydust 假设 存在于 CRAN 上 很遗憾fairydust刚刚向 CRAN 发布了 2 0 0 版本 完全破坏了我计划使用的功能 所以我更新了

随机推荐

  • python 关闭文件描述符问题

    我认为这个问题更多的是 编码风格 而不是技术问题 说我有一行代码 buf open test txt r readlines 文件描述符会自动关闭 还是会留在内存中 如果文件描述符未关闭 关闭它的首选方法是什么 如果将文件对象分配给变量 则
  • 直接在主页登录/注册

    例如 我希望用户可以直接登录主页 而不是在页面 account login 上登录 我应该做什么才能使它成为可能 如何将主页上的输入字段与 allauth 连接 我不知道这是否太复杂而无法以这种方式工作 有一个适合我的解决方案 这不是最佳解
  • 有没有办法使用 OpenLayers 更改 openstreetmap 中某些要素的颜色?

    我正在使用 OpenLayers 来显示 openstreetmap 有没有办法编辑地图上的某些功能 例如改变水的颜色 消除国家之间的边界等 如果不能使用 JavaScript 来完成 我猜还有其他方法可以做到这一点 比如托管您自己的地图版
  • Django 模型选择:IntegerField 与 CharField

    TL DR 我有一个包含数百万个实例的表 我想知道应该如何为其建立索引 我有一个使用 SQL Server 作为数据库后端的 Django 项目 在生产环境中拥有大约 1400 万个实例的模型后 我意识到遇到了性能问题 class User
  • 使用 DataContext Attach 方法更新实体时更新检查问题

    我正在尝试在通用存储库中创建一个更新方法作为 LINQ to SQL 数据访问层 我有一个这样的实体 Table public class Product Column IsPrimaryKey true IsDbGenerated tru
  • 查找存储在字符数组中的函数的导数

    我需要做的是读取包含方程的文件 我需要计算每个方程的导数 然后将这些导数方程写入不同的 txt 文件中 我已将所有方程读入字符数组数组中 现在我不知道将它们存储到数组中后该怎么办 我真的不需要帮助将方程写入另一个文件 我知道我能解决这个问题
  • 将带有 List 的字典转换为 IEnumerable

    我有一本字典 Dictionary
  • jQuery $.inArray() 无法与使用 jQuery makeArray() 制作的数组正常工作

    我用这个创建了一个日期数组 var holidays 7 24 2010 7 25 2010 var holidaysArray jQuery makeArray holidays 然后测试数组中是否存在 myDate 日期对象 if in
  • 组合多个Powershell脚本

    当将多个 Powershell 脚本组合在一起时 如 mklement0 在他的回答中所示将多个 Powershell 脚本转换为 EXE https stackoverflow com a 59288784 139212 有没有办法考虑嵌
  • 在Scheme中实现“累计”功能

    几周来我一直在尝试实现 Accumulate 函数 我已经正确实现了一个 Map 函数 它遍历列表并在每个元素上运行一个函数 我正在使用这个函数来实现 累积 define accumulate lambda op base func ls
  • 如何在没有 nms 的情况下从 Tensorflow 对象检测 ssd-mobilenet 解码 raw_outputs/box_encodings

    为了在 Android 上部署我自己的 SSD 移动模型并使用NNAPI加速 我根据以下方法重新训练了模型 无需 NMS 后处理tensorflow objection detection API 没有 NMS 输出raw outputs
  • 在 Marklogic Javascript 中实现 For 循环?

    我可以使用下面的 XQuery 获取集合中文档的所有 URI for doc in fn collection transform return xdmp node uri doc 但是 当我尝试在 MarkLogic 的 Javascri
  • pytest:在报告中添加长测试描述的最佳方法

    默认情况下 pytest 在 pytest 报告中使用测试函数名称或测试文件名称 有没有在报告中添加测试描述 长测试名称 的最佳方法 而无需使用 pytest 重命名文件或函数 我们可以通过在运行时更新测试用例名称来做到这一点吗 请求 节点
  • 插入 MySQL 表或更新(如果存在)

    我想向数据库表添加一行 但如果存在具有相同唯一键的行 我想更新该行 例如 INSERT INTO table name ID NAME AGE VALUES 1 A 19 假设唯一的密钥是ID 并在我的Database 有一行ID 1 在这
  • 在 Bash 中,如何在字符串中插入 $(...) ?

    我正在尝试编写一个 Bash 脚本 在我的实时站点的数据库上执行 mysqldump 然后将转储添加并提交到 Git 存储库 这是我到目前为止所拥有的 存储在 sh 文件中 该文件由crontab https en wikipedia or
  • Xamarin 链接 SDK 和 UserAssemblies:膨胀类 android.support.v7.widget.FitWindowsFrameLayout 时出错

    我的应用程序无需链接即可运行 当我仅选择 Sdk Assemblies 时 它也可以正常工作 它在调试模式下也能正常工作 但如果我选择链接 SDk 和 UserAssemblies 它就会开始失败 我检查了日志 只找到了下面的内容 我到处谷
  • 如何在 perl 中使用 Qt GUI(使用 Qt Designer 创建)?

    我已经在 Qt Designer 中创建了 Qt GUI 并将其编译 使用 puic4 到 gui pm 现在 我想在我的 Perl 应用程序中使用它 但我陷入困境 因为我不知道如何创建窗口对象 我在 start pl 中有以下代码 use
  • `—` 或 `—` HTML 输出有什么区别吗?

    mdash or 8212 这些有区别吗 其中一个比另一个得到更好的支持吗 SGML 解析器 或 XHTML 情况下的 XML 解析器 可以处理 8212 无需处理 DTD 这对浏览器来说并不重要 因为它们只是吸食标签汤 同时 mdash
  • 多选,Jquery:检查我的多选是否至少应选择一个选项

    您好 我将总结我的问题 希望您能理解 主要目标 在点击选择按钮之前检查是否至少选择了一个选项 否则 如果在没有选择至少一个选项的情况下单击选择按钮 则会显示一条消息 请选择至少一个选项 Purpose 我的其他代码中有一些原因需要一个选择按
  • 在用户定义函数中使用 step() 时丢失对象错误

    5天了还是没有回复 从西蒙的评论中可以看出 这是一个可重现且非常奇怪的问题 似乎只有当具有非常高预测能力的逐步回归被包装在函数中时才会出现这个问题 我已经为此苦苦挣扎了一段时间 任何帮助将不胜感激 我正在尝试编写一个运行多个逐步回归并将其全