【问题标题】:R statistics programming : using magrittr piping to pass 2 parameters to functionR统计编程:使用magrittr管道将2个参数传递给函数
【发布时间】:2019-08-26 21:23:25
【问题描述】:

我正在使用 magrittr,并且能够通过管道从 magrittr 将一个变量传递给 R 函数,并且还可以选择在多变量函数的情况下放置哪个参数:F(x,y,z,... )

但我想同时传递 2 个参数。

例如,我将使用 dplyr 中的 Select 函数并传入 tableName 和 ColumnName:

我以为我可以这样做:

tableName %>% ColumnName %>% select(.,.)

但这不起作用。 希望有人可以帮助我。

编辑:

下面有人说这是其他人提供的链接的副本。 但是基于多变量函数管道的magrittr定义的代数结构,仅仅基于管道函数的代数定义应该是“可行的”。

别人提供的链接,超越了基本定义,使用了其他外部函数和/或库来尝试实现向函数传递多个参数。

我正在寻找一个解决方案,如果可能的话,只需使用 magrittr 库和其他基本操作。

所以这是对这个问题的限制。

在我的大多数大学数学和计算机科学课程中,我们只能使用课程中教授的内容。所以当我说我正在使用 dplyrmagrittr 时,这应该意味着它们是唯一被允许使用的东西,所以它在这个约束下。

希望这能阐明此处可能解决方案的范围。

如果仅通过这些库无法做到这一点,我希望有人告诉我这是无法做到的。

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 嗨 Samuel,我根据您的链接进入了聊天室,我可以看到所有内容,但无法在其中发帖。在页面底部它说我必须登录,但我已经登录。我在一个浏览器中尝试过,我收到一条错误消息,说目前 Stackoverflow 存在问题。在当前的浏览器 firefox 中,我收到相同的消息,告诉我登录时必须登录,但没有收到任何错误消息,但我继续在聊天室中转圈,然后单击登录,然后我进入我仍然登录的stackoverflow上的常规页面。所以我要绕圈子
  • 这是用户合并的结果。请使用网站底部的联系我们链接与开发人员联系。

标签: r magrittr


【解决方案1】:

我认为您需要更详细地了解您想要什么,但据我了解这个问题,我认为一种解决方案可能是:

list(x = tableName, y = "ColumnName") %>% {select(eval(.$x),.$y) }

这只是对聊天中链接的代码的修改。其他实现的问题是select() 的第一个和第二个输入必须是特定的(和不同的)类型。所以仅仅插入两个字符串或两个对象是行不通的。

本着同样的精神,您也可以使用:

list(x = "tableName", y = "ColumnName") %>% { select(get(.$x),.$y) }

list(tableName, "ColumnName") %>% do.call("select", .).

但是请注意,所有这些函数(即get()eval()do.call())都包含环境规范,如果指定不当可能会导致错误。它们在这些示例中工作得很好,因为一切都在全局环境中发生,但如果它们被调用,例如,在函数中调用,情况可能会改变。

【讨论】:

  • 嗨,Arwood,这正是我想要的。所以使用 dplyr 的 select() 函数,就数据类型而言,参数的传入方式必须更加小心。
  • 我为我正在使用的表名和列尝试了您的代码,并且您的代码有效!我会给你的答复作为这个问题的答案。但另一个建议使用另一个名为“do.call()”的函数,只是想知道你是否知道你是否也可以使用“do.call()”函数来做到这一点。
  • 是的,您可以使用do.call() 使用list(tableName, "ColumnName") %>% do.call("select", .) 来执行此操作。请注意,对于所有这些,您需要了解执行评估的环境,否则可能会出错。我将更新我的答案以提供更多背景信息。
  • 嗨,Arwood,感谢您为此付出的努力,我真的很感激。我会试试看它是否有效,我会给你一些反馈。感谢您就此方法的问题提出警告。
  • 嗨,arwood,我尝试用我的特定表和特定列名替换 tableName,它成功了!所以问题出现了,我以统一的方式做事,这意味着 list() 中的 tableName 和 ColumnName 都被引用或不引用,我尝试了这两种变体,所以我不会想到一个不被引用会被引用。所以它只是试图理解这些函数的语法规则是如何工作的。再次感谢,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2017-07-30
  • 2017-10-08
  • 2013-04-25
  • 1970-01-01
  • 2020-01-23
  • 2018-08-19
  • 1970-01-01
  • 2020-05-03
相关资源
最近更新 更多