调用函数时设置列名

2024-02-19

假设我们有一个数字 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    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(...)命令。到底还有吗?


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

为了理解它是如何工作的,我参考这个问题 https://stackoverflow.com/questions/10449366/levels-what-sorcery-is-this.

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

然而,在许多情况下,以这种方式折叠代码行所需的心理和语法体操是不值得的。多条线往往更容易遵循。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用函数时设置列名 的相关文章

随机推荐