从 R 中的命名列表中组合 2 个元素
Combine 2 elements out of a named list in R
我想从命名列表中取出 2 个元素,对其应用一个函数,并将其放入一个矩阵中,其中行和列名称分别为组合的第一个和第二个元素的名称。
例如,我有这个命名列表:
input <- list(a="tom", b="dick", c="harry")
作为组合元素的函数,我将使用 paste0
矩阵的结果将是:
a b c
a NA "tomdick" "tomharry"
b NA NA "dickharry"
c NA NA NA
我已经尝试过 combn
,但后来我得到:
> combn(input, 2, FUN=function(x) paste0(x[1], x[2]))
[1] "tomdick" "tomharry" "dickharry"
我该怎么做?
一定有更好的方法。但是你可以这样做。
创建一个空数据框:
d <- data.frame(matrix(NA, nrow = length(input), ncol = length(input)))
colnames(d) <- rownames(d) <- names(input)
d
a b c
a NA NA NA
b NA NA NA
c NA NA NA
for
循环填写姓名:
for(i in row.names(d)){
for(j in colnames(d)){
d[i, j] <- paste0(input[i], input[j])
}}
用NA替换矩阵下部的名字
d[lower.tri(d, diag = T)] <- NA
d
a b c
a <NA> tomdick tomharry
b <NA> <NA> dickharry
c <NA> <NA> <NA>
结合@David Arenburg 的评论和@Jimbou 的回答,
input <- list(a="tom", b="dick", c="harry")
result <- outer(input, input, paste0)
result[lower.tri(result,diag = T)] <- NA
名称结果存储您发布的矩阵。
我想从命名列表中取出 2 个元素,对其应用一个函数,并将其放入一个矩阵中,其中行和列名称分别为组合的第一个和第二个元素的名称。 例如,我有这个命名列表:
input <- list(a="tom", b="dick", c="harry")
作为组合元素的函数,我将使用 paste0
矩阵的结果将是:
a b c
a NA "tomdick" "tomharry"
b NA NA "dickharry"
c NA NA NA
我已经尝试过 combn
,但后来我得到:
> combn(input, 2, FUN=function(x) paste0(x[1], x[2]))
[1] "tomdick" "tomharry" "dickharry"
我该怎么做?
一定有更好的方法。但是你可以这样做。
创建一个空数据框:
d <- data.frame(matrix(NA, nrow = length(input), ncol = length(input)))
colnames(d) <- rownames(d) <- names(input)
d
a b c
a NA NA NA
b NA NA NA
c NA NA NA
for
循环填写姓名:
for(i in row.names(d)){
for(j in colnames(d)){
d[i, j] <- paste0(input[i], input[j])
}}
用NA替换矩阵下部的名字
d[lower.tri(d, diag = T)] <- NA
d
a b c
a <NA> tomdick tomharry
b <NA> <NA> dickharry
c <NA> <NA> <NA>
结合@David Arenburg 的评论和@Jimbou 的回答,
input <- list(a="tom", b="dick", c="harry")
result <- outer(input, input, paste0)
result[lower.tri(result,diag = T)] <- NA
名称结果存储您发布的矩阵。