对于引用不同编号对象的循环

时间:2016-03-01 20:55:57

标签: r loops for-loop

RI中的

有一个名为Newick1Newick2Newick3等100个phlyo对象的列表。我想在树之间进行成对比较(例如all.equal.phylo(Newick1, Newick2) )但由于每个文件都有不同的名称,因此很难确定如何有效地执行此操作。

我认为下面的for循环之类的东西会起作用,但是如何为循环的每次迭代指定一个不同的文件?出于显而易见的原因,我在下面的代码中输入的[i]和[j]不起作用,但我不知道如何替换它们。

非常感谢!

for (i in 1:99) {
    for (j in i+1:100) {
        all.equal.phylo(Newick[i], Newick[j]) -> output[i,j] 
} }

2 个答案:

答案 0 :(得分:0)

您可以尝试以下变体:

# make a two column dataframe
# and filter the identical values
df        <- expand.grid(1:100,1:100)
names(df) <- c('i','j')
df        <- df[!df$i == df$j,] 

# example function that takes two parameters
addtwo    <- function(i,j){i + j}

# apply that function across rows of the dataframe
results   <- mapply(addtwo, df$i, df$j)

# using the same logic, 
# your function would look something like this
getdistance <- function(i,j, newicks=NEWICKS) {
    all.equal.phylo(newicks[i], newicks[j]) 
}

# and apply it like this
results   <- mapply(getdistance, df$i, df$j)

关键概念:

  • expand.grid()
  • mapply()

答案 1 :(得分:-1)

尝试mget()按名称引用多个对象

> x1 <- x2 <- x3 <-1
> mget(paste0("x",1:3))
$x1
[1] 1

$x2
[1] 1

$x3
[1] 1