【发布时间】:2016-10-23 23:06:08
【问题描述】:
我有一个函数来计算分类变量和连续变量的矩阵的相关性:
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。我会告诉你怎么做,但你没有提供一个可重复的例子。 -
您可能还会在
pryr包中找到对此类任务有用的函数dots或named_dots。
标签: r arguments parameter-passing