2

cデータ フレームの各列の ecdf() を取得し、列の行rをその列にフィードして、セルごとecdf(c)に対応する値を返そうとしています。ecdf(c)(r)以下の機能が動作します。

getecdf <- function(data){
  # initialise result data
  result <- data.frame(matrix(NA, nrow = nrow(data), ncol = ncol(data)));
  rownames(result) <- rownames(data); colnames(result) <- colnames(data);
  for (c in 1:ncol(data)){
    col <- data[,c];
    cum <- ecdf(col)
    for (r in 1: length(col)){
      result[r,c] <- cum(col[r])
    }
  }
  return <- result  
}
cum_matrix <- getecdf(iris)

ただし、これを行うためのワンライナーコードがあることは 99.5% 確信applyしています。私は試した:

apply(iris, 2, function(x) for (r in x){ ecdf(x)(r)})

しかし、結果を保存する方法がわかりません。

何か助けはありますか?

4

1 に答える 1

4

ecdfベクトル化されているため、使用できます

apply(iris[, 1:4], 2, function(c) ecdf(c)(c))
于 2013-11-28T09:59:27.270 に答える