说我有以下代码:
# 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)
)吗?>
答案 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