R 统计编程:使用 magrittr 管道将 2 个参数传递给函数
R statistics programming : using magrittr piping to pass 2 parameters to function
我正在使用 magrittr,并且能够通过 magrittr 的管道将一个变量传递给 R 函数,并且还可以选择在多变量函数的情况下将哪个参数放置在何处:F(x,y,z,. ..)
但是我想同时传2个参数
例如,我将使用 dplyr 中的 Select 函数并传入 tableName 和 ColumnName:
我以为我可以这样做:
tableName %>% ColumnName %>% select(.,.)
但这没有用。
希望有人可以帮助我。
编辑:
下面有人说这是其他人提供的 link 的副本。
但是根据多变量函数Pipe的magrittr定义的代数结构,根据pipe函数的代数定义应该是"doable"
其他人提供的 link 超出了基本定义,并使用其他外部函数和/或库来尝试向函数传递多个参数。
我正在寻找解决方案,如果可能的话,只需使用 magrittr 库和其他基本操作。
所以这是对这个问题的限制。
在我的大部分大学数学和计算机科学课程中,我们只能使用课程中教授的内容。所以当我说我正在使用 dplyr 和 magrittr 时,这应该意味着这些是唯一允许使用的东西,所以它在这个约束。
希望这能澄清这里可能的解决方案的范围。
如果仅通过这些库无法做到这一点,我希望有人告诉我这是不可能的。
我认为您需要更详细地说明您想要什么,但据我了解这个问题,我认为一个解决方案可能是:
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()
)中都有一个环境规范,如果指定不当可能会导致错误.它们在这些示例中工作得很好,因为一切都发生在全局环境中,但如果它们被调用,这可能会改变,例如,在函数中调用。
我正在使用 magrittr,并且能够通过 magrittr 的管道将一个变量传递给 R 函数,并且还可以选择在多变量函数的情况下将哪个参数放置在何处:F(x,y,z,. ..)
但是我想同时传2个参数
例如,我将使用 dplyr 中的 Select 函数并传入 tableName 和 ColumnName:
我以为我可以这样做:
tableName %>% ColumnName %>% select(.,.)
但这没有用。 希望有人可以帮助我。
编辑:
下面有人说这是其他人提供的 link 的副本。 但是根据多变量函数Pipe的magrittr定义的代数结构,根据pipe函数的代数定义应该是"doable"
其他人提供的 link 超出了基本定义,并使用其他外部函数和/或库来尝试向函数传递多个参数。
我正在寻找解决方案,如果可能的话,只需使用 magrittr 库和其他基本操作。
所以这是对这个问题的限制。
在我的大部分大学数学和计算机科学课程中,我们只能使用课程中教授的内容。所以当我说我正在使用 dplyr 和 magrittr 时,这应该意味着这些是唯一允许使用的东西,所以它在这个约束。
希望这能澄清这里可能的解决方案的范围。
如果仅通过这些库无法做到这一点,我希望有人告诉我这是不可能的。
我认为您需要更详细地说明您想要什么,但据我了解这个问题,我认为一个解决方案可能是:
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()
)中都有一个环境规范,如果指定不当可能会导致错误.它们在这些示例中工作得很好,因为一切都发生在全局环境中,但如果它们被调用,这可能会改变,例如,在函数中调用。