R 在调用函数时设置列名

R 在调用函数时设置列名,r,function,dataframe,apply,combn,R,Function,Dataframe,Apply,Combn,假设我们有一个数值data.framefoo,并希望找到每两列的总和: foo <- data.frame(x=1:5,y=4:8,z=10:14, w=8:4) bar <- combn(colnames(foo), 2, function(x) foo[,x[1]] + foo[,x[2]]) bar # [,1] [,2] [,3] [,4] [,5] [,6] #[1,] 5 11 9 14 12 18 #[2,] 7 13

假设我们有一个数值data.frame
foo
,并希望找到每两列的总和:

foo <- data.frame(x=1:5,y=4:8,z=10:14, w=8:4)
bar <- combn(colnames(foo), 2, function(x) foo[,x[1]] + foo[,x[2]])
bar
#     [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    5   11    9   14   12   18
#[2,]    7   13    9   16   12   18
#[3,]    9   15    9   18   12   18
#[4,]   11   17    9   20   12   18
#[5,]   13   19    9   22   12   18

这很简单,但我想在相同的
bar中执行列标记,这是可能的,但它会混淆代码。简洁和清晰之间的权衡是尖锐的

为了理解它是如何工作的,我引用了


colnames(x)您从data.frame而不是矩阵开始。没那么重要,但它有助于跟上我们通常使用的术语

你所追求的是不可能的。如果查看
combn
的代码,当结果简化时,它不使用维度名称

    }
    if (simplify) 
        array(out, dim.use)
    else out
}

您可以破解该函数并使其添加维度名称,也可以手动将其添加到festum结果中。

+1用于使用多行。简明扼要之前,代码是供你们阅读的,而不是电脑。有趣的答案。是否仍要为
函数(x)
结果指定列名?如果是这样,我们可能会跳过
apply(…)
函数。根据@RomanLuštrik answer,我知道它在
combn()
函数中不起作用,但在其他地方可能有用。谢谢,我在OP中将矩阵更改为data.frame
colnames(x) <- y
x <- `colnames<-`(x,y)
bar <- `colnames<-`(combn(colnames(foo), 2, function(x) foo[,x[1]] + foo[,x[2]]),
                    apply(combn(colnames(foo),2), 2, paste0,collapse=""))
    }
    if (simplify) 
        array(out, dim.use)
    else out
}