朋友们,我有一个数据框,我想从中选择唯一的三列并将所选列发送到一个自定义函数,该函数将返回一个列向量和一些标量。我想知道是否有办法在 R 中使用简洁的代码来做到这一点。现在让我详细说明。
假设这是我的数据框:
> data
X1 X2 X3 X4 X5
1 1 5 9 13 17
2 2 6 10 14 18
3 3 7 11 15 19
4 4 8 12 16 20
然后,我创建一个索引以从该数据框中选择所有三个唯一列:
> cols=combn(ncol(mat), 3)
> cols
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 1 1 2 2 2 3
[2,] 2 2 2 3 3 4 3 3 4 4
[3,] 3 4 5 4 5 5 4 5 5 5
并连接名称:
> nams<-apply(combn(colnames(data),3), 2, function(z) paste(z, collapse = ' '))
> nams
[1] "X1 X2 X3" "X1 X2 X4" "X1 X2 X5" "X1 X3 X4" "X1 X3 X5" "X1 X4 X5" "X2 X3 X4"
[8] "X2 X3 X5" "X2 X4 X5" "X3 X4 X5"
现在这是我不确定如何进行的部分。如何最好地编写一个自定义函数,该函数对发送给它的三个向量进行操作并返回一个由向量和标量组成的对象,例如返回 X1+X2+X3 以及 X1、X2 和 X3 的均值和标准差等标量。
假设以下是函数:
someFunc <- function(subMat){
someFunc$vector=subMat[,1]+subMat[,2]+subMat[,3] # return vector
someFunc$mean1=mean(subMat[,1])
someFunc$sd1=sd(subMat[,1])
someFunc$mean2=mean(subMat[,2])
someFunc$sd2=sd(subMat[,2])
someFunc$mean3=mean(subMat[,3])
someFunc$sd3=sd(subMat[,3])
return(someFunc)
}
我想我想弄清楚如何构建 R 中的自定义函数来处理和发送向量+标量,因此将上述函数视为我的粗略尝试。
下一步。在其他帖子之一中@Prasad Chalasani 指出,发送此类函数的正确 R 方法将涉及使用 apply 函数,但我似乎无法将这些部分放在一起。
result <- apply( cols, 2, someFunc ........
如果有任何含糊之处,请告诉我,我会尽我所能进一步澄清问题。总之:我有一个数据框,我想从中将所有唯一的三列发送到一个函数,然后返回多个结果。无法定义这样的函数并使用 apply 向其发送数据。