使用可选的非默认参数以编程方式创建 R 函数

2024-01-11

继从如何以编程方式创建 R 函数? https://stackoverflow.com/questions/12982528/how-to-create-an-r-function-programmatically

我想从它们的组件构建 R 函数,如下所示:

testfn <- function(..., expression){
  args <- substitute(alist(...))
  body <- substitute(expression)
  eval(call("function", as.pairlist(eval(args)), body), parent.frame())
}

如果有默认值,这可以正常工作:

testfn(x = 4, y = 5, expression = {
  y <- y + 2
  x + y
})

=>
function (x = 4, y = 5) 
{
    y <- y + 2
    x + y
}

但如果一个或多个参数没有默认参数,它将不起作用:

testfn(x = 4, y, expression = {
  y <- y + 2
  x + y
})

=>
 Error in eval(expr, envir, enclos) : 
 invalid formal argument list for "function" 

我可以把=在 arg 列表中使其正常工作:

testfn(x = 4, y = , expression = {
  y <- y + 2
  x + y
})

=>
function (x = 4, y) 
{
    y <- y + 2
    x + y
}

但我不想在函数参数中强制执行这一点。我尝试过编辑函数中的 alist,但是当我这样做时,我收到另一个无效的形式参数列表错误:

testfn2 <- function(..., expression){
  args <- substitute(alist(...))
  body <- substitute(expression)
  for (arg in 2:length(args)){
    if(names(myargs)[arg] == ""){
       args[[arg]] <- as.name(paste(as.character(args)[arg], "="))
    }
  }
  eval(call("function", as.pairlist(eval(args)), body), parent.frame())
}

testfn2(x = 4, y, expression = {
  y <- y + 2
  x + y
})

=>
Error in eval(expr, envir, enclos) : 
invalid formal argument list for "function" 

如何更改此设置以便可以在缺少参数默认值的情况下调用 testfn() ?我想用字符串构造一个新的列表parse但这意味着我不能拥有例如函数作为参数。


这是一种不太优雅的方法:

testfn <- function(..., expression){
  args <- eval(substitute(alist(...)))
  body <- substitute(expression)

  ## Fix for missing default values
  tmp <- names(args)
  if (is.null(tmp)) tmp <- rep("", length(args))
  names(args)[tmp==""] <- args[tmp==""]
  args[tmp==""] <- list(NULL)

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

使用可选的非默认参数以编程方式创建 R 函数 的相关文章

  • 对 data.table 中的列表列执行操作

    假设我有一个data table 例如dt lt data table foo list 1 3 4 6 bar c 2 7 如何使用 dt 框架对 foo 向量列表执行操作 操作可能是将 bar 添加到 foo 返回列表 3 5 11 1
  • 如何使用 R 将每个文件的数据添加为附加行,从而将不同的 .csv 文件合并为一个完整的文件?

    我有几个不同的文件夹 它们都包含一个 csv 文件 所有这些 csv 文件都有一个单独的列 其中包含实验的一种条件的数据 我想以将每个文件的数据添加为新列的方式合并这些 csv 文件 目前 它看起来像这样 C1 csv 102 106 15
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • 将第 N 行上的 NA 行插入 data.frames 列表,其中 N 来自列表

    经过几个小时后 我发现自己无法解决以下问题 我有一个数据框列表 我想分别向每个 DF 插入 而不是替换 一行或多行 NA 始终至少一行 要插入的 NA 数量存储在单独的列表中 为了说明这一点 我有以下两个列表 list of datafra
  • rpart“as.character(x) 中的错误:无法强制类型 'builtin' 为类型 'character' 的向量”消息是什么意思?

    我一直在用头撞rpart几天了 尝试为我拥有的这个数据集制作分类树 我认为现在是时候询问生命线了 我确信这是我没有看到的愚蠢的事情 但这里是我一直在做什么 EuropeWater lt read csv file paste Users a
  • 将字符串列拆分为多个虚拟变量

    作为 R 中 data table 包的相对缺乏经验的用户 我一直在尝试将一个文本列处理为大量指示符列 虚拟变量 每列中的 1 表示特定的子字符串是在字符串列中找到 例如我想处理这个 ID String 1 a b 2 b c 3 c 进入
  • R 中两个时间戳之间的左连接

    我的目标是执行左连接intervals哪里的bike id比赛和created at时间戳在records在 之间start and end in the intervals table gt class records 1 data ta
  • R 闪亮仪表板中的动态重复条件面板

    我正在尝试创建一个动态条件面板 所以我的条件如下 在用户界面中输入 selectInput inpt Input Number seq 1 50 1 selectize FALSE 我的条件面板 UI 输入是 conditionalPane
  • 警告消息 - 来自 dummies 包的 dummy

    我正在使用 dummies 包为分类变量生成虚拟变量 其中一些变量具有两个以上类别 testdf lt data frame A as factor c 1 2 2 3 3 1 B c A B A B C C C c D D E D D E
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何按时间间隔匹配数据帧?

    这是我从数据记录器导入原始数据时经常出现的问题 温度记录仪设置为每十分钟记录一次温度 单独的气体记录仪设置为记录最后十分钟间隔内使用的气体 我想将这两个记录器的数据合并到一个数据框中进行绘图和分析 但时间并不完全一致 我希望每十分钟的时间段
  • 闪亮的应用程序包:css 和所有 www/ 目录内容

    我正在尝试将 Shiny 应用程序转换为 R 包 但我在处理有关 www 目录以及 松散 文件的所有问题时遇到了问题 我闪亮的应用程序运行得很好 但是当我尝试 打包它 时 它不起作用 我闪亮的应用程序目录 my shiny app R ut
  • 在r中的某个阈值处破坏 cumsum() 函数

    例如我有以下代码 cumsum 1 100 我想打破它 如果一个元素 i 1 大于3000 我怎样才能做到这一点 因此 而不是这个结果 1 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 15
  • 如何按定义的顺序将图像合并到一个文件中

    我有大约 100 张图像 png 我不想手动执行此操作 而是希望将它们按照定义的顺序 基于文件名 并排放置在一个 pdf 中 每行 12 个图像 有人有什么建议吗 我按照下面托马斯告诉我的方法尝试了 它把它们贴在旁边有一个黑边 我怎样才能去
  • R Shinydashboard 自定义 CSS 到 valueBox

    我一直在尝试将 valueBox 的颜色更改为自定义颜色 超出 validColors 中可用的颜色 但一直无法这样做 我知道有一种方法可以使用标签来包含自定义 CSS 但是我无法将它们放在正确的位置 ui lt dashboardPage
  • 在网格中制作一个矩形图例,并标记行和列

    我有一个 ggplot 我将因子映射到填充和 alpha 如下所示 set seed 47 the data lt data frame value rpois 6 lambda 20 cat1 rep c A B each 3 cat2
  • data.table 抛出“找不到对象”错误[重复]

    这个问题在这里已经有答案了 我有一个数据表 library data table mydt lt data table index 1 10 当我在全局环境中尝试它时 我可以让它工作 但当我在调试器中或在包测试中使用它时却无法工作 问题是我
  • 从数据框中绘制多条平滑线

    我对 R 比较陌生 我正在尝试绘制从 csv 文件加载的数据框 数据由 6 列组成 如下所示 xval col1 col2 col3 col4 col5 第一列 xval 由一系列单调递增的正整数 例如 10 40 60 等 组成 其他列
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • 当设置 coord_fixed 时,ggplot/shiny 中的鼠标悬停坐标是错误的

    我正在使用问题中的答案 当您将鼠标悬停在闪亮的 ggplot 上时出现工具提示 https stackoverflow com questions 27965931 tooltip when you mouseover a ggplot o

随机推荐

  • 如何在 Android 中关闭/销毁 Firebase 引用?

    这是场景 创建了 firebase 引用 Firebase myRef new Firebase url In Main Activity 用户单击按钮导航到其他活动 调用主活动的 onPause 有没有办法销毁这个构造函数 此引用正在创建
  • Base64 编码图像 blob 未在 IE 中显示

    echo img src height 150 这在 firefox safari 和 chrome 中显示的图像效果很好 但在 Internet Explorer 中它显示了一个漂亮的红十字 我认为这是因为编码的原因 尝试更换data i
  • Nlog目标数据库在运行时设置连接信息

    使用 Nlog 和数据库目标 有没有办法在运行时设置连接信息 我记得我的一些同事也做过类似的事情 他找到了这样的答案 http nlog forum 1685105 n2 nabble com DDL for Database Table
  • 溢出:隐藏不适用于正方向的平移

    我最近遇到了一件奇怪的事情overflow hidden 我将它设置为一个元素 然后我想将其中的元素转换为translate 当它向负方向平移时 它将被隐藏 但如果我向正方向平移 它就不会被隐藏 在桌面浏览器中 它并没有真正显示出来 但您可
  • sp_executesql 与 'IN' 语句

    我试图使用 sp executesql 来防止 SQL 2005 中的 SQL 注入 我有一个像这样的简单查询 SELECT from table WHERE RegionCode in X101 B202 但是 当我使用 sp execu
  • 函数后面的const如何优化程序?

    我见过一些这样的方法 void SomeClass someMethod const 这个 const 声明有什么作用 它如何帮助优化程序 Edit 我看到这个问题的第一部分之前已经被问过 BUT 它仍然没有回答第二部分 这将如何优化程序
  • 可编辑文本字段的 UITableView 列表

    我知道这可能不符合 Apple 的 iPhone 人机界面指南 但我想摆脱一级推送视图并拥有可编辑文本字段的列表 此外 我希望当视图出现时键盘从一开始就出现在屏幕上 问题是 当我有超过三个这样的字段时 弹出键盘将覆盖下面的字段 用户无法向下
  • 如果 @Produces 注释缺失,球衣服务会返回什么?

    我开始学习开发安全的网络服务 正如我注意到的 大多数示例都使用以下注释 Consumes 定义输入参数的格式 Produces 定义输出参数的格式 但在实际代码中我看到的方法如下所示 POST Consumes MediaType APPL
  • Chrome扩展,在后台脚本中播放声音

    我想从 Chrome 扩展程序播放声音 但我读到内容脚本无法播放声音 所以我把这段代码放在我的后台脚本中 var audio new Audio alert ogg audio play 但还是没有声音 从 generated backgr
  • 将 ASP.NET 会员资格提供程序与现有用户数据库结合使用

    我目前正在 Net 中重写整个网站 当前网站是用foxpro编写的 并使用自定义逻辑 验证规则和Sql服务器表来存储和验证用户 我想使用会员提供程序 但我有一个主要问题 我不知道如何克服 新站点和旧站点都必须共享用户和凭据 用户必须能够在过
  • 没有匹配的构造函数来初始化“std::thread”

    我一直在研究一个相当简单的设施 并发for循环构造 它采用输入元素列表 输出向量和从输入元素计算输出元素的函数 我有这个片段无法编译 template
  • scikit-learn 中出现“ValueError:无法将字符串转换为浮点数”错误

    我正在运行以下脚本 import numpy as np import matplotlib pyplot as plt import pandas as pd from sklearn preprocessing import OneHo
  • 自动下载Gradle项目中的源

    在 Maven 项目中 有一个选项可以自动下载所有库的源代码 和 javadoc 对于 Gradle 项目 我没有找到任何选项 只需打开一个类并单击 在互联网中搜索 如果您有很多库 这会非常烦人 有没有办法自动附加来自互联网的源 maven
  • c++03:std::map 中内置类型的默认构造函数

    我一直以为下面的代码 std map
  • spring-boot:repackage 和 mvn package 之间的区别

    在阅读了 Spring 文档和网络上的其他一些文章后 我仍然很困惑 Spring Boot Maven 插件之间有什么区别spring boot 重新打包和一个常规的MVN包 我认为 mvn package 创建了一个包含所有依赖项的 ja
  • 使用 shell 脚本删除服务器中的文件

    对所有文件执行 wget 后如何删除服务器中的文件 我知道当您通过 ftp 连接到服务器时 删除命令可以工作 但我无法在运行 shell 脚本时使用该命令 以下是我的脚本 请告诉我其中有什么问题 bin bash filelist ls 2
  • 如何使用 mongoimport 导入 json 文件

    我正在尝试使用导入 json 文件mongoimport使用此命令行 mongoimport db posts collection rows file post history json 但它返回此错误 connected to loca
  • 在同一查询中使用 DISTINCT 和 TOP

    我想用DISTINCT and TOP在同一个查询中 我试过 SELECT DISTINCT TOP 10 FROM TableA 但我还有一个副本personID 所以我想这样做 SELECT DISTINCT personID TOP
  • UIPickerView 最佳实践?

    一个简短的问题 在注册过程中 我想要求用户从值列表中选择一个值 使用视图控制器添加所有文本字段并为值添加选择器视图是正确的方法吗 由于选择器视图在文本字段区域之间需要如此多的空间 我想知道在这种情况下的最佳实践是什么 到目前为止 这是我的代
  • 使用可选的非默认参数以编程方式创建 R 函数

    继从如何以编程方式创建 R 函数 https stackoverflow com questions 12982528 how to create an r function programmatically 我想从它们的组件构建 R 函数