ループ内で適用されるカスタム関数を作成しようとしていますが、私のテーブルのすべての変数に必要なすべての情報をテーブルに与えようとしています。私の機能はdplyr
の機能とbase
に基づいています。Rデータフレーム内のすべての変数に適用するカスタム関数
myfun <- function(x, y) summarise(x, var=names(x[y]), n=sum(!is.na(y)), blank=n()-sum(!is.na(y)), distinct=n_distinct(y, na.rm=TRUE))
私の問題は、base
機能(names()
)が権利を与えるために引用符を与えられることにy引数(変数名)が必要ですが、引用符なしで単純にそうであることが必要n_distinct
dplyr
機能ということですna.rm=TRUE
と答えてください(私がn_distinct(x[y], na.rm=TRUE)
を使用しても、NA値なしの結果は得られません)。だから私は両方の関数を渡す引数のy
の良い形を持つ解決策を見つける方法を知らない。私はnames()
機能のために\"
を使用しようとしましたが、動作していないようです。ここで私は取得エラー:
myfun <- function(x, y) summarise(x, var=names(x[y]), n=sum(!is.na(y)), blank=n()-sum(!is.na(y)), distinct=n_distinct(y, na.rm=TRUE))
myfun(mtcars, "cyl")
エラー:Error in summarise_impl(.data, dots) : variable 'y' not found
myfun <- function(x, y) summarise(x, var=names(x[y]), n=sum(!is.na(y)), blank=n()-sum(!is.na(y)), distinct=n_distinct(y, na.rm=TRUE))
myfun(mtcars, cyl)
エラー:Error in summarise_impl(.data, dots) : Evaluation error: object 'cyl' not found.
myfun <- function(x, y) summarise(x, var=names(x[y]), n=sum(!is.na(x[y])), blank=n()-sum(!is.na(x[y])), distinct=n_distinct(x[y], na.rm=TRUE))
myfun(mtcars, "cyl")
エラーはありませんが、見られることをna.rm=TRUE
いないようです。
私の目標は、私のデータフレームの各変数に対して1つの行を持つテーブルを作成するためにいくつかのループを持つリンゴになり、1つのテーブル内のすべての変数に対してこれらの情報を持たせることができます。
私は、最小限の再現性の例作ってみました:
library(dplyr)
myfun <- function(x, y) summarise(x, var=names(x[, y]), n=sum(!is.na(x[, y])), blank=n()-sum(!is.na(x[, y])), n_distinct=n_distinct(x[, y], na.rm=TRUE))
a <- mtcars%>%
summarise(n=sum(!is.na(cyl)), blank=n()-sum(!is.na(cyl)), n_distinct=n_distinct(cyl, na.rm=TRUE))
a <- lapply(colnames(mtcars), function(x) data.frame(bind_rows(a, myfun(mtcars, x))))
a <- data.frame(bind_rows(a, myfun(mtcars, "cyl")))
a <- a%>%
filter(!is.na(var))%>%
distinct(var, .keep_all=TRUE)
しかし、(少なくとも私にとっては)いくつかの不可解な理由のために、それは(ラインa <- lapply(colnames(mtcars), function(x) data.frame(bind_rows(a, myfun(mtcars, x))))
、エラーメッセージError in summarise_impl(.data, dots) : Column
VAR is of unsupported type NULL
)が動作しませんが。それは私のデータフレームでうまく動作し、私はそれをサブセット化し、それはまだうまくいきました。同じクラスの同じ値を手書きで手作業で作成しましたが、うまくいきませんでした...だから、なぜ私のデータセットには効果があるのか分かりません。なぜなら、私はRで新しいので、この言語コードに関する講義をしなくても、実際に何をしているのか分かりませんが、 (私のために上記のコードのような)作品は、その後、これ以上...
だから、このコードは私のためにかなり良い作品私はn_distinct(x[, y])
を使用しているため、それは私が理解できない何na.rm=TRUE
を、無視することを言ったように、ただ問題があります。
申し訳ありませんが私は思っていましたが、私はあなたがそれを明確にする方法についてコメントを残して編集してうれしいです。私は単に私の試練で完全に失われており、物事をより明確に提示する方法は知られていません。助けをありがとう、混乱のためにごめんなさい
ありがとうございました!それは仕事をした! n_distinct(x、na.rm = TRUE)で長さ(ユニーク(x))を変更しなければならなかった。どうもありがとう! – GaryDe