簡體   English   中英

dplyr mutate,自定義函數和變量名稱作為字符

[英]dplyr mutate, custom function and variable name as characters

我仍然不完全清楚如何將某些表達式傳遞給dplyr。

我想在mutate中使用用戶定義的函數,並能夠將列名稱作為字符傳遞。 我用interp {lazyeval}嘗試了一些沒有成功的東西。

請參閱下面的虛擬示例。

library(dplyr)
library(lazyeval)

# Define custom function
sumVar <- function(x, y) { x + y }

# Using bare column names (OK)
iris %>%
  mutate(newVar = sumVar(Petal.Length, Petal.Width))

# Using characters for column names (does not work)
iris %>%
  mutate_(newVar = sumVar('Petal.Length', 'Petal.Width'))

我們可以嘗試

library(lazyeval)
library(dplyr)
res1 <- iris %>% 
           mutate_(newVar= interp(~sumVar(x, y),
                x= as.name("Petal.Length"), 
                y = as.name("Petal.Width")) )

OP的方法

res2 <- iris %>%
          mutate(newVar = sumVar(Petal.Length, Petal.Width))
identical(res1, res2)
#[1] TRUE

更新

dplyr的devel版本中(很快將在2017年4月發布0.6.0 ),這也可以是quosure

varNames <- quos(Petal.Length,  Petal.Width)
res3 <- iris %>%
            mutate(newVar = sumVar(!!! varNames))

quos正在引用並在mutate ,我們使用!!! unquote評估list

identical(res2, res3)
#[1] TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM