R - 加速 for 循环和 paste/paste0 之间的组合

R - Speeding up combination between for loop and paste/paste0

我正在处理一个数据框 'df',它有数百万行和四列(即染色体、位置、等位基因 1、等位基因 2)。现在我想将这些列中的字符连接成一个单独的向量 'cc'。这是我的第一次尝试:

myfunc = function(CHR) {
    chr = subset(df, df$Chromosome == CHR)
    cc = data.frame(No=seq.int(nrow(chr)), pos_al1_al2=NA)
    for (i in 1: nrow(chr)) {
        cc$pos_al1_al2[i] = paste(CHR, chr$Position[i], ".", chr$Allele1[i], chr$Allele2[i])
        cc = cc[, -1] # remove the column 'No'
    }
} 

# Run my code 
myfunc(7)

其中 CHR 是我将输入到函数中的我感兴趣的染色体数(例如,1、2、3、...或 22)。当然,CHR 必须在 1 到 22 的范围内,如 'df'.

的列 Chromosome

我的想法是:我首先创建了一个名为 cc 的空向量,其行数与 data.frame 'df'.

相同

现在我在 cc 中创建了一个名为 pos_al1_al2 的新列,其每一行都包含您在函数中看到的字符。

计算时间很慢。我想它来自 for 循环,但我不知道如何优化我的函数。

感谢任何帮助!提前致谢。

有什么理由不能在向量化模式下使用paste()

myfunc <- function(CHR) {
    chr <- subset(df, df$Chromosome == CHR)
    cc <- data.frame(No = seq.int(nrow(chr)), pos_al1_al2=NA)
    cc$pos_al1_al2 <- paste(CHR, chr$Position, ".", chr$Allele1, chr$Allele2)
    cc = cc[, -1] # remove the column 'No'
}