R在rownames上应用高级功能

时间:2016-01-10 14:35:30

标签: r apply

起初,我认为以下问题绝对容易,我只是无法谷歌或正确解释,但如果是这样,请给我一个链接,我会关注它。

我提出了当前问题的最小例子,但我对这个问题感兴趣。

dataset <- matrix(runif(10*3), nrow=10, ncol=3)
rownames(dataset) <- letters[1:dim(dataset)[1]]

betas <- matrix(0, nrow=dim(dataset)[1], ncol=2)
rownames(betas) <- letters[1:dim(dataset)[1]]
colnames(betas) <- c("sum", "2*sum")

for(name in rownames(betas)){
    res1 <- sum(dataset[name, ])
    res2 <- res1 *2 
    betas[name, ] <- c(res1, res2)
}

当然这很好用,但我有大约20000行,所以花了太多时间。

我可以使用apply或其中一个系列替换循环吗?

修改 我在哪里丢失了最后一段代码,我评论了为什么我必须这样做。 我真正的问题是如下,因此我不能只是做一个总和,然后再乘以它:

for(name in rownames(betas)){
    res1 <- coxph("amazing survival model calculations")
    res2 <- summary(res1) 
    betas[name, ] <- c(res1$coef, res2$coef[5])
}

2 个答案:

答案 0 :(得分:0)

这是一个R单行做同样的事情:

cbind(betas, t(apply(dataset, 1, function(x) c('res1'=sum(x), 'res1*2'=sum(x)*2))))

答案 1 :(得分:0)

rowSums()保留namesdata.frames的{​​{1}}属性,因此您可以轻松完成此操作:

matrices