에서 바로 기능을 "..."인수에서 내가 범주와 연속 변수 모두의 행렬의 상관 관계를 계산하는 기능이 있습니다주기 인수 R
correlation <- function(matrix, ...) {
xx <- do.call(rbind, lapply(colnames(mtrc), function(ex_i) {
ty_i <- wtype(matrix, ex_i)
yy <- sapply(colnames(mtrc), function(ex_j) {
ty_j <- wtype(matrix, ex_j)
if(ty_i == "numeric" & ty_j == "numeric") {
cor(mtrc[ , c(ex_i, ex_j)], ...)[1, 2]
} else if(ty_i == "factor" & ty_j == "factor") {
cramersV(table(mtrc[ , c(ex_i, ex_j)]), ...)
} else {
fm <- paste(ex_i, "~", ex_j)
if(ty_i == "factor") {
fm <- paste(ex_j, "~", ex_i)
}
fm <- lm(fm, data = mtrc[ , c(ex_i, ex_j)], ...)
lm.beta(fm)
}
})
names(yy) <- colnames(mtrc)
yy
}))
rownames(xx) <- colnames(mtrc)
xx
}
내 질문이 제대로 전달하는 방법이다, 인수는 ...
에서 cor
, cramerV
및 lm
입니다. 사용자가 cor
에 대한 인수를 제공하고 행렬에 범주 형 변수가있는 경우 인수의 이름이 일치하지 않으므로 cramerV
또는 lm
은 오류 (사용되지 않은 인수 ...)를 발생시킵니다.
그래서 ... 나는 당신이 가질 수있는 모든 해결책이나 아이디어에 열려 있습니다.
'dots <- list (...)'를 실행하고 어떤 요소가'formalArgs (lm) '과 일치하는지 확인하고 목록을 이들에 부분 집합하십시오. 이 목록에'fm'과'data' 매개 변수를 추가하고'do.call'을 사용하여'lm'을 호출하십시오. 나는 당신에게 어떻게 보여줄 것이지만 재현 가능한 예를 제공하지는 않습니다. – Roland
'pryr' 패키지에서'dots' 또는'named_dots' 함수를 찾을 수 있습니다. –