代码之家  ›  专栏  ›  技术社区  ›  Dan

r中通过apply传递给函数的对象的默认名称

  •  0
  • Dan  · 技术社区  · 6 年前

    假设我有以下代码:

    # 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(df, MARGIN = 1, function(x)print(x[1]))
    

    这段代码只打印每行的第一个元素。

    tidyverse ,默认情况下,通过管道传递给函数的对象由引用 . . 如果这也是 应用 我可以写些东西…

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   G. Grothendieck    6 年前

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

    apply(df[1], 1, print)
    

    2)GSBFN 也可以在gsubfn中使用fn$在这种情况下,我们可以使用公式表示法指定函数。自由变量,这里 x ,假定为函数的参数。

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

    3)马格利特 我们也可以这样做:

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

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

    df %>% apply(1, . %>% { print(.[1]) } )
    

    尽管在最后一个例子中你必须小心,因为括号是绝对需要的,下面的内容不起作用,因为它似乎把第二个点解释为 df 而不是匿名函数的输入。

    library(magrittr)
    df %>% apply(1, . %>% print(.[1])) # wrong
    
    推荐文章