使用“data”参数编写函数

2023-12-07

我想编写一个函数,它可以将数据框中的列或列名称及其来自的数据帧作为参数。

df <- data.frame(x = c(1:5), y = c(6:10), z = LETTERS[1:5])

my_fxn <- function (aaa, bbb, ccc, data) {
  if (!missing(data)) {
    aaa = as.numeric(data$aaa)
  }
  print(aaa[1])
}

当我提供数据框中的列作为参数时,此函数工作正常:

> my_fxn(df$x, df$y, df$z, df)
[1] 1

如果列名称和数据框名称与函数参数的名称不同,则该方法不起作用:

> my_fxn(x, y, z, df)
[1] NA

但是,当列名称和数据框名称与函数参数的名称相同时,它确实有效:

data <- df
names(data) <- c("aaa", "bbb", "ccc")
> my_fxn(aaa, bbb, ccc, data)
[1] 1

到底是怎么回事?

Thanks!


借助 Cet - 您可能正在寻找这样的东西:

df <- data.frame(x = c(1:5), y = c(6:10), z = LETTERS[1:5])

my_fxn <- function (aaa, bbb, ccc, data) {
  if (!missing(data)) {
    aaa = as.numeric(data[[aaa]])
    bbb = as.numeric(data[[bbb]])
    ccc = as.character(data[[ccc]])
  }
  print(aaa[1])
}

my_fxn("x", "y", "z", df)
#> [1] 1

随着使用enquo() from library(dplyr),我们不再需要输入字符作为函数变量:

library(dplyr)

my_fxn <- function (aaa, bbb, ccc, data) {
  aaa <- enquo(aaa)
  bbb <- enquo(bbb)
  ccc <- enquo(ccc)

  if (!missing(data)) {
    aaa = as.numeric(pull(data, !!aaa))
    bbb = as.numeric(pull(data, !!bbb))
    ccc = as.character(pull(data, !!ccc))
  }
  print(aaa[1])
}

my_fxn(x, y, z, df)
#> [1] 1

有关功能构建的更多信息enquo() and !!可以在这里找到:https://dplyr.tidyverse.org/articles/programming.html#programming-recipes


最后,使用基本 R 解决方案deparse() and substitute():

my_fxn <- function (aaa, bbb, ccc, data) {
  aaa <- deparse(substitute(aaa))
  bbb <- deparse(substitute(bbb))
  ccc <- deparse(substitute(ccc))

  if (!missing(data)) {
    aaa = as.numeric(data[[aaa]])
    bbb = as.numeric(data[[bbb]])
    ccc = as.character(data[[ccc]])
  }
  print(aaa[1])
}

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

使用“data”参数编写函数 的相关文章

  • 如何计算由离散数据定义的表面下的体积?

    我需要确定由离散数据点表示的一系列表面下方的体积 在我的数据中 每个样本都作为数据帧列表中的单独数据帧存储 这是一些 小 示例数据 df1 lt data frame x c 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 y
  • 非等值连接 - 比较 R 中的两个数据帧

    我想根据第二个数据框中存在的值过滤数据框 例如 匹配第一个数据帧中 BP 列中高于 start pos 列的第一个值且小于 end pos 列或仅小于第二个数据中的 end pos 的行框架 我需要对第二个数据框中的所有值重复此过程 目前
  • 读取r中不同目录中的多个文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想从不同的目录读取多个 csv 文件 然后将其放入单个数据框中 我有两种目录可供阅读 A LogIIS 文件夹01 文件 csv 在
  • R CMD INSTALL --build package --> “小插图丢失”

    问题 C gt Rcmd exe INSTALL build library C Users local aphalo Documents R win library 3 0 photobiology C gt Rcmd exe INSTA
  • R 中的约束优化

    我正在尝试使用http rss acs unt edu Rdoc library stats html constrOptim html http rss acs unt edu Rdoc library stats html constr
  • 如何使用 gvisMotionChart 处理 POSIXlt 格式时间?

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

    现在我正在尝试将图标放入 ggplot 可视化中 为此 我在网上检查了一些教程 当我运行 Claus Wilke 的以下代码示例时 library ggtext library ggplot2 ggplot mtcars aes mpg d
  • aggregate() 将多个输出列放入矩阵中

    我要计算某个变量的多个分位数 gt res1 lt aggregate airquality Wind list airquality Month function x quantile x c 0 9 0 95 0 975 gt head
  • 如何使用Shiny中的下载按钮?

    我想下载一个csv使用 Shiny 中的下载按钮下载文件 该文件将使用辅助 r 脚本中的参数创建 SERVER output downloadData lt downloadHandler filename function paste d
  • 条件 RenderUI R 闪亮

    我的 renderUI 有问题 但在任何地方都找不到解决方案 可能我向谷歌问了错误的问题 不仅仅是一个闪亮的问题 而是一个基本的 R 问题 我在 R 中有一个函数 根据输入将返回一个表格或文本 所以我在我的 server R 中以这种方式创
  • 使用 data.table 而不是 data.frame 进行子集化

    我正在处理一个包含 300 万行和 10 列的数据框 并且正在对其进行一些子集化 我下面有一些玩具代码 当我子集化时 需要很长时间 如果我使用 data table 和 data table 上的子集会更快吗 这是一些玩具代码 s lt c
  • 如何使用python从文件夹中的pdf中提取文本并将其保存在数据框中?

    我有很多文件夹 每个文件夹都有几个 pdf 文件 也有其他文件类型 如 xlsx 或 doc 我的目标是提取每个文件夹的pdf文本并创建一个数据框 其中每条记录都是 文件夹名称 每列以字符串形式表示该文件夹中每个pdf文件的文本内容 我设法
  • R Shinydashboard 根据选项卡选择显示/隐藏 UI 元素

    如果有人可以提供帮助 我正在努力满足要求 我必须根据用户的选项卡面板选择在仪表板侧栏上显示 隐藏一些元素 这是 UI 代码的一部分 可让您了解我的应用程序的结构 我需要仅在 tabpPanel 2 上显示 Fourthoutput Fift
  • 如何为每个条形图制作具有定义水平边框的堆叠条形图

    我有一些数据想以一种我不知道如何在条形图中显示的方式 希望你能帮我解决这个问题 我的表由 4 列组成 簇 0 6 IgG Status mild high mild low Severe High 患者 1 16 和值 每个簇的标准化值 这
  • 如何在函数和循环中使用 data.table?

    在评估效用时data table vs dplyr 一个关键因素是在函数和循环中使用它的能力 为此 我修改了本文中使用的代码片段 data table 与 dplyr 一个可以做得很好而另一个不能做或做得很差吗 https stackove
  • 加载 plyr 包时出现问题

    我使用 R 2 13 1 但未能成功尝试在 R 中加载包 plyr 1 6 我已将其手动安装到目录 R library 中 我的代码是 libPaths R library library plyr 我收到消息 库 plyr 中的错误 pl
  • R 用簇绘制热图,但隐藏树状图

    默认情况下 Rheatmap将聚集行和列 mtscaled as matrix scale mtcars heatmap mtscaled scale none 我可以禁用集群 heatmap mtscaled Colv NA Rowv N
  • 如何使用键盘命令中断 R 中正在运行的代码?

    如何中断 R 中正在运行的脚本 假设我遇到无限循环或其他问题 并且我想停止脚本运行 有键盘命令可以做到这一点吗 如果有帮助的话 在 Python 中是 Ctrl c 我在R中尝试过 但没有成功 自我回答 几乎是其他人的评论和答案的总结 In
  • 使用“kde”函数进行 R 中的 5-D 核密度估计

    我想通过使用 R 的 ks 库中的 kde 函数来执行 5 维数据 x y z 时间 大小 的核密度估计 在它的手册中 它说它可以执行核密度估计1 至 6 维数据 手册第 24 页 http cran r project org web p
  • rgdax(coinbase)数据未按预期收集数据

    我正在尝试使用rgdaxR 包用于下载一些历史价格 我设置了 API 密钥等 并尝试在过去 24 小时内加载 start lt strftime Sys time Y m dT H M SZ tz UTC end lt strftime S

随机推荐

  • 强制浏览器清除缓存

    有没有办法在我的页面上放置一些代码 以便当有人访问网站时 它会清除浏览器缓存 以便他们可以查看更改 使用的语言 ASP NET VB NET 当然还有 HTML CSS 和 jQuery 如果这是关于 css and js更改 那么一种方法
  • 如何使用java解码使用openssl aes-128-cbc编码的字符串?

    我在用着openssl编码一个string使用以下命令 openssl enc aes 128 cbc a salt pass pass mypassword lt lt lt stackoverflow 结果给我一个编码字符串 U2Fsd
  • 我可以从 C# 在远程应用程序域中注入线程吗

    我想知道是否可以将线程注入到在单独进程中运行的远程应用程序域中 我的猜测是我可以使用调试接口 ICorDebug 来做到这一点 但我想知道是否还有其他方法 最近宣布 Mono 提供了一项新功能来实现这一点 请参阅此帖子装配注入
  • 调试 VHDL Modelsim 中的迭代限制错误

    我正在 Modelsim 上为 d 触发器编写 VHDL 代码 当我尝试模拟它时出现错误 错误 vsim 3601 在 400 ps 时达到迭代限制 我不确定这意味着什么 但我已经检查了大部分源代码以查找错误 但没有成功 谁能猜出问题可能是
  • 使用反应式扩展创建多个计时器

    我有一个非常简单的类 我用它来轮询目录中的新文件 它有位置 开始监视该位置的时间以及再次检查的时间间隔 以小时为单位 public class Thing public string Name get set public Uri Uri
  • 使用 Spring Security 检查额外参数

    请在Spring Security中给出提示 如何在用户登录期间检查附加参数 例如 不仅要检查 用户名 和 密码 还要检查他是否通过电子邮件链接确认注册 所有数据都存储在数据库中 我可以通过 UserDetailsS ervice 的实现轻
  • 什么CSS元素控制引导滚动间谍活动/悬停?

    http examine com v5x creatine html summary 将鼠标悬停在摘要上 控制它的 CSS 是什么 我好像找不到啊 Active active类 对于大多数 Bootstrap 功能来说都是如此 Hover
  • 为什么我无法用C#向本地数据库(SQL精简版)插入数据?

    我正在 Visual Studio 上做一个项目 我正在使用本地数据库 空的sql server精简版 我选择了数据集并创建了我的表 图像 它有一个主要的自动增量 id 列和一个 nvarchar ImagePath 列 我想在其中插入数据
  • 在 django 中选择不同的单独列?

    我很好奇是否有任何方法可以在 Django 中执行不是 的查询 SELECT FROM 在下面 我正在尝试做一个 SELECT DISTINCT columnName FROM 反而 具体来说 我有一个如下所示的模型 class Produ
  • 同时调用 primefaces 中的多个 bean 方法

    我正在使用 primefaces 4 0 构建一个 Web 应用程序 我想在单击命令按钮时同时调用两个 bean 方法 我尝试使用远程命令
  • 多父树(或有向图)实现sql server 2005

    我需要在 SQL Server 2005 上实现多父树 或有向图 我读过几篇文章 但大多数都使用具有独特根的单亲树 如下所示 My PC Drive C Documents and Settings Program Files Adobe
  • 为什么克隆 DIV 中的 SELECT 在刷新时会出现错误行为?

    我正在使用 jQuery Mobile 的 clone 函数来克隆表单中的 div 这样我就可以拥有可重复的部分 但现在我遇到了嵌套选择的问题 一旦 div 被克隆并且嵌套选择被新的 id 更新 下一次 刷新 后就会发生一些奇怪的事情 发生
  • C++ 中 100 位数字的平方根

    无符号长长 最多可以解出15位数字 有没有办法求a的平方根100位数字 你也可以使用Boost 多精度图书馆 该库为一些流行的多精度实现提供了包装器 include
  • 截图应用,可以在任何视图下截图

    我知道可以在您自己的应用程序中截取屏幕截图 但我想知道是否有可能有一个应用程序允许您在打开应用程序时在任何视图中截取屏幕截图 我很确定这是不可能的 但我只是想仔细检查一下 谢谢 不可以 您无法与 iOS 沙箱之外的其他应用程序进行交互
  • 运行作为 Junit 插件测试运行的测试用例时没有可运行的方法

    我已经为 eclipse RCP 应用程序创建了测试用例 Test public final void testIsCacertsFileExist try URL url new URL https server web services
  • Native SQL(使用 MySQL)与使用 Hibernate ORM 的性能差异?

    我正在将 Spring MVC 用于涉及多级管理后端和客户 成员前端的应用程序 该项目最初启动时没有框架 只有简单的本机 JDBC 调用来进行数据库访问 随着项目的显着增长 一如既往 我进行了更重要的数据库调用 有时会查询较大的选择大小 我
  • Eclipse JUNO 无法启动

    当我启动 Eclipse 时 它 没有启动 出现错误并告诉我查看日志文件 查看日志文件 Users max work projects metadata log 操作系统 MacOS 10 7 4日食 4 2 朱诺 ADT 20 我的旧版本
  • Spring MVC @ModelAttribute 方法返回“错误请求”400

    再会 我遇到一个问题 我尝试发送带有某些属性的 POST 请求 但收到 错误请求 响应 这是我的控制器 Controller RequestMapping group public class GroupController private
  • Jar 文件 - 阻止访问源代码

    我想将一个小型 Java 应用程序作为可运行的 jar 移交 但我不希望任何人访问我的源代码 我是否正确地假设 jar 文件中不包含源代码 java 文件 用户269799 假设你不这样做putjar 文件中的 java 文件 它们不会神奇
  • 使用“data”参数编写函数

    我想编写一个函数 它可以将数据框中的列或列名称及其来自的数据帧作为参数 df lt data frame x c 1 5 y c 6 10 z LETTERS 1 5 my fxn lt function aaa bbb ccc data