R 将一个2参数函数传递给combn

R 将一个2参数函数传递给combn,r,apply,combn,R,Apply,Combn,我使用的是内置数据集“ChickWeight”。对于每一个名字,体重,时间,小鸡,饮食,我的功能就是简单地计算每一对名字,体重时间,体重小鸡,体重饮食,时间小鸡,时间饮食,小鸡饮食之间的差异。函数和计算本身非常简单和不必要,但我想知道如何在组合中传递2参数函数 我的剧本如下 out <- combn(names(ChickWeight), 2, simplify=FALSE) f <- function(x, y) { diff <- (x - y) } mapply(f,

我使用的是内置数据集“ChickWeight”。对于每一个名字,体重,时间,小鸡,饮食,我的功能就是简单地计算每一对名字,体重时间,体重小鸡,体重饮食,时间小鸡,时间饮食,小鸡饮食之间的差异。函数和计算本身非常简单和不必要,但我想知道如何在组合中传递2参数函数

我的剧本如下

out <- combn(names(ChickWeight), 2, simplify=FALSE)

f <- function(x, y)
{
diff <- (x - y)
}

mapply(f, out[1,], out[2,])
out
我想了解如何在组合中传递2参数函数

好的,有两个问题。编程问题通过以下方式解决:

combn(names(ChickWeight), 2, function(x) ChickWeight[[x[1]]] - ChickWeight[[x[2]]])
combn
总是采用单参数函数,这令人困惑


概念上的问题是:鸡是有序的数据,而饮食是分类的。这两种方法在诸如减法之类的算术运算中都没有意义(这就是上面的代码给出警告和NAs的原因)

我想了解如何在组合中传递2参数函数

好的,有两个问题。编程问题通过以下方式解决:

combn(names(ChickWeight), 2, function(x) ChickWeight[[x[1]]] - ChickWeight[[x[2]]])
combn
总是采用单参数函数,这令人困惑



概念上的问题是:鸡是有序的数据,而饮食是分类的。这两种方法在诸如减法之类的算术运算中都没有意义(这就是上面的代码给出警告和NAs的原因)。

您是否签出了
[1,]
f
得到的是
名称
与非数字元素之间的差异。您应该在
comb
中使用simplify=TRUE。然后你的
mapply
函数应该可以工作。然后你会得到一个不同的错误,因为你正在减去charactersHanks。有没有一种方法可以引用不带out[1,]和out[2,]的ChickWeight,以便我的函数减去它们各自列中的数字?是否已选中
out[1,]
f
得到的是
名称
与非数字元素之间的差异。您应该在
comb
中使用simplify=TRUE。然后你的
mapply
函数应该可以工作。然后你会得到一个不同的错误,因为你正在减去charactersHanks。有没有一种方法可以引用没有out[1]和out[2]的ChickWeight,这样我的函数就可以减去它们各自列中的数字?非常感谢。我试过使用不同的数据集,效果很好。只有一个参数可能会让事情变得更困难,因为我最终想要使用一个更复杂的函数。例如,我想通过lm()找到数据集之间的系数。您建议我使用combn以外的命令吗?我想
lm
应该可以与
combn
配合使用。您可能只想对列重新排序,而不是尝试将它们的名称传递给
~
公式,例如
lm(ChickWeight[c(1,2)])$coef
。根据应用程序的不同,我可能只使用循环(以简化事情)或并行化(如果问题太大以至于按顺序执行很慢)。非常感谢。我试过使用不同的数据集,效果很好。只有一个参数可能会让事情变得更困难,因为我最终想要使用一个更复杂的函数。例如,我想通过lm()找到数据集之间的系数。您建议我使用combn以外的命令吗?我想
lm
应该可以与
combn
配合使用。您可能只想对列重新排序,而不是尝试将它们的名称传递给
~
公式,例如
lm(ChickWeight[c(1,2)])$coef
。根据应用程序的不同,我可能只使用循环(简化事情)或并行化(如果问题太大以至于按顺序执行很慢)。