2016-08-12 7 views
0

の関数の引数として文字列を使用する元の列を使用して新しい列を作成したい、新しい列のすべての組み合わせを表すために文字を使用し、次に新しい列を作成するためにdplyr::mutateを使用する。 foo <- eval(parse(text = paste(new.feature,collapse = ",")))に何か間違いがあります、あなたの答えに感謝します。私はpaste(new.feature,collapse = ",")を使用する場合、私はこれらの何かについてR

paste(new.feature,collapse = ",") 
のような文字を取得します

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) 

[1]「Sepal.Length-Sepal.Width、Sepal.Length-Petal.Length、Sepal.Length -Petal.Width、Sepal.Length-Species、Sepal.Width-Petal.Length、Sepal.Width-Petal.Width、Sepal.Width-Species、Petal.Length-Petal.Width、Petal.Length-Species、Petal.Width - 種別 "

最後に私は欲しいe mutateを使用して新しい列を作成しましたが、失敗しました。

答えて

1

文字列と適切な言語式を混在させて一致させることはできません。可能であれば、eval()を避ける方がいいです。ここでは、すべての減算を定義して実行する式を作成する方法があります。

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) 

ここで、sign.pasteは、文字列ではなく言語表現のリストを返します。これは、基本的には、文字列を評価した場合に設定するものです。そして、mutate関数の標準評価版であるmutate_を必ず使用します。これにより、パラメータを別々のパラメータではなく大きなリストとして渡すことができます。詳細は、vignette("nse")を参照してください。 (因子の減算に関する警告を避けるために数値列に限定しています)

関連する問題