我想通过使用原始列彼此相减来创建新列,我想使用字符来表示所有新列的组合,然后我想使用dplyr::mutate
来创建新列。foo中有错误
col.names <- names(iris)
sign.paste <- function(x){paste(x,collapse = "-")}
new.feature <- apply(combn(col.names,2),2,sign.paste)
paste(new.feature,collapse = ",")
foo <- eval(parse(text = paste(new.feature,collapse = ",")))
dplyr::mutate(iris,foo)
当我使用粘贴(new.feature,collapse=“,”)时,我会得到如下字符
paste(new.feature,collapse = ",")
最后,我想使用mutate
创建新的列,但是失败了...
你不能只是混合和匹配字符串和适当的语言表达式。如果可能的话,最好避免ava()
。这里有一种方法可以构建一个表达式来定义所有的减法,然后执行它。
col.names <- names(iris)[sapply(iris, is.numeric)]
sign.paste <- function(x){substitute(x-y, list(x=as.name(x[1]), y=as.name(x[2])))}
new.feature <- apply(combn(col.names,2),2,sign.paste)
dplyr::mutate_(iris,.dots=new.feature)
请注意,现在签名。粘贴
返回语言表达式列表,而不是字符串。这基本上是你在评估字符串时设置的。然后我们确保使用mutate\uuu
,这是mutate
函数的标准评估版本。它允许我们将参数作为一个大列表传递,而不是单独的参数。有关更多信息,请参见vignette(“nse”)
。(我还仅限于数字列,以避免有关因子减法的警告)