R中套用传递给函式的物件的预设名称

时间:2018-11-15 14:12:24

标签: r apply

说我有以下代码:

# Create data frame
df <- data.frame(a = 1:5, b = 6:10)

#   a  b
# 1 1  6
# 2 2  7
# 3 3  8
# 4 4  9
# 5 5 10

现在,我分别使用apply

打印每一行
apply(df, MARGIN = 1, print)

如果我想引用传递给FUN中的apply的每一行的特定元素,则可以通过定义一个匿名函数来做到这一点,例如:

apply(df, MARGIN = 1, function(x)print(x[1]))

此代码仅打印每行的第一个元素。

tidyverse中,默认情况下.指代通过管道传递给函数的对象。如果apply也是这种情况,我可以写一些类似...

apply(df, MARGIN = 1, print(.[1]))

我的问题:我可以引用默认名称传递给FUN的对象,从而避免需要函数定义(例如function(x))吗?

1 个答案:

答案 0 :(得分:2)

1)重组数据我们可以编写:

delimOptional

2)gsubfn 人们也可以在gsubfn中使用fn $。在这种情况下,我们可以使用公式表示法指定函数。自由变量(这里只是apply(df[1], 1, print) )被假定为函数的参数。

x

3)magrittr 我们也可以这样做:

library(gsubfn)
fn$apply(df, 1, ~ print(x[1]))

library(magrittr)
df %>% apply(1, . %>% `[`(1) %>% print)

df %>% apply(1, . %>% extract(1) %>% print)

尽管对于最后一个,您必须要小心,因为绝对需要大括号,并且以下内容不起作用,因为它似乎将第二个点解释为df %>% apply(1, . %>% { print(.[1]) } ) ,而不是匿名输入。功能。

df