r - 调用函数时设置列名

标签 r function dataframe apply combn

假设我们有一个数字数据框 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 中缺少的列名.我想要 bar 的列名显示 foo 中的相关列,例如在这个例子中:

colnames(bar) <- apply(combn(colnames(foo),2), 2, paste0,collapse="")
colnames(bar)
#[1] "xy" "xz" "xw" "yz" "yw" "zw"

这很简单,但我想在同一个 bar <- combn(...) 中执行列标记命令。到底有没有?

最佳答案

这是可能的,但它会混淆您的代码。此处简洁和清晰之间的权衡是尖锐的。

要了解其工作原理,我引用了 this question .

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=""))

然而,在许多情况下,以这种方式折叠代码行所需的脑力和句法体操是不值得的。多行往往更容易理解。

关于r - 调用函数时设置列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20919037/

相关文章:

perl - 在 Perl 中,如何将函数作为另一个函数的参数传递?

python - pandas DataFrame 仅针对一列进行转置/熔化/旋转

按组运行回归并将拟合值和/或残差分配回原始 data.frame?

r - R中的网络图和美国 map

r - data.table `:=` 具有动态输入(现有列)和输出(新列名称)的赋值表达式

javascript - 想要使用 document.getelementbyid 显示两个变量

python - 如何在python函数中将未知数量的参数相互相乘

使用 ggplot2 在单个图中以图形方式表示多条曲线

python - 如果特定年份的列中有 NaN 值,则删除行

r - 如何在R中使用中断来分割时间序列数据?