首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用一个向量中的元素在列表中创建一个列表

如何使用一个向量中的元素在列表中创建一个列表
EN

Stack Overflow用户
提问于 2019-04-09 23:01:57
回答 4查看 324关注 0票数 1

我正在尝试使用R中的单个向量在列表中创建列表。

我有矢量了

代码语言:javascript
运行
复制
Conditions = c('A', 'B', 'C', 'D')

我想要一个包含A,B,C和D的列表(没问题)。但是,我还希望这些列表包含四个项目,命名为:A vs AA vs B,... D vs CD vs D,最终得到一个包含四个列表(A,B,C和D)的列表,每个列表包含四个可以添加数据帧的列表('vs‘列表)。

从本质上讲,我想要这样的东西:

代码语言:javascript
运行
复制
My list
 |
 |
 |        /- A vs A       /- B vs A      /- C vs A      /- D vs A
 |       /               /              /              /
 |      /- A vs B       /- B vs B      /- C vs B      /- D vs B
 |     /               /              /              /
 ---A-|-------------B-|------------C-|------------D-|                       
       \               \              \              \
        \ - A vs C      \ - B vs C     \ - C vs C     \ - D vs C
         \               \              \              \  
          \- A vs D       \- B vs D      \- C vs D      \- D vs D

这是我尝试过的:

代码语言:javascript
运行
复制
Conditions <- c('A', 'B', 'C', 'D')

MyList <- as.list(Conditions) 

for(i in 1:length(MyList)) {
    for(i in 1:length(Conditions)) {
    MyList[i] <- list(paste(MyList[i], 'vs', Conditions[i]))
  }
}

但它不起作用。例如,我的第一个项目从A变成了A vs A vs A vs A vs A

编辑:为了更好地澄清,我想,

列表,例如,

代码语言:javascript
运行
复制
Letters

其中包含四个列表,

ABCD

它们依次包含与其名称相对应的列表:

A:A vs AA vs BA vs CA vs D B:B vs AB vs BB vs CB vs D C:C vs A,D23,D24,D25,D: D26,D27,D28,D29

然后我将在每个“vs”中放入一个数据帧。

到目前为止,最有帮助的答案来自MrFlick:

代码语言:javascript
运行
复制
lapply(Conditions, function(x) 
  as.list(paste(x, "vs", Conditions)))

它返回:

代码语言:javascript
运行
复制
[[1]]
[[1]][[1]]
[1] "A vs A"

[[1]][[2]]
[1] "A vs B"

[[1]][[3]]
[1] "A vs C"

..。

代码语言:javascript
运行
复制
[[4]][[2]]
[1] "D vs B"

[[4]][[3]]
[1] "D vs C"

[[4]][[4]]
[1] "D vs D"

我只想让列表为空,并将字符串用作名称。对于上面的元素,我认为它看起来像这样:

代码语言:javascript
运行
复制
[[D]][[D vs D]]
    [1] NA        #Data Frame DvsD.Rda to be added here later.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-09 23:24:50

如果您的逻辑总是相同的,请尝试

代码语言:javascript
运行
复制
Conditions = c('A', 'B', 'C', 'D')
L=setNames(as.list(Conditions),Conditions)

L=lapply(L, function(x){
  setNames(vector("list",length(Conditions)),paste0(x," vs ",Conditions))
})

> str(L)
List of 4
 $ A:List of 4
  ..$ A vs A: NULL
  ..$ A vs B: NULL
  ..$ A vs C: NULL
  ..$ A vs D: NULL
 $ B:List of 4
  ..$ B vs A: NULL
  ..$ B vs B: NULL
  ..$ B vs C: NULL
  ..$ B vs D: NULL
 $ C:List of 4
  ..$ C vs A: NULL
  ..$ C vs B: NULL
  ..$ C vs C: NULL
  ..$ C vs D: NULL
 $ D:List of 4
  ..$ D vs A: NULL
  ..$ D vs B: NULL
  ..$ D vs C: NULL
  ..$ D vs D: NULL
票数 1
EN

Stack Overflow用户

发布于 2019-04-09 23:23:43

我认为你正在尝试做的事情是这样的:

代码语言:javascript
运行
复制
Conditions <- c('A', 'B', 'C', 'D')

MyList = lapply(Conditions, function(x) list())
names(MyList) = Conditions

for(i in names(MyList)) {
    for(j in 1:length(Conditions)) {
        MyList[[i]][[paste(i, 'vs', Conditions[j])]] = NA #Put NA or the data frame you want.
    }
}

输出:

代码语言:javascript
运行
复制
$A
$A$`A vs A`
[1] NA

$A$`A vs B`
[1] NA

$A$`A vs C`
[1] NA

$A$`A vs D`
[1] NA


$B
$B$`B vs A`
[1] NA

$B$`B vs B`
[1] NA

$B$`B vs C`
[1] NA

$B$`B vs D`
[1] NA


$C
$C$`C vs A`
[1] NA

$C$`C vs B`
[1] NA

$C$`C vs C`
[1] NA

$C$`C vs D`
[1] NA


$D
$D$`D vs A`
[1] NA

$D$`D vs B`
[1] NA

$D$`D vs C`
[1] NA

$D$`D vs D`
[1] NA
票数 2
EN

Stack Overflow用户

发布于 2019-04-09 23:20:44

这是我的解决方案,看一下,

代码语言:javascript
运行
复制
vec <- c("A", "B", "C", "D")

res <- lapply(vec, function(x) {
    out <- expand.grid(x, vec)
    lapply(1:nrow(out), function(y) {
        paste(out[y, 1], " vs ", out[y, 2])
    })
})
str(res)

结果:

代码语言:javascript
运行
复制
List of 4
 $ :List of 4
  ..$ : chr "A  vs  A"
  ..$ : chr "A  vs  B"
  ..$ : chr "A  vs  C"
  ..$ : chr "A  vs  D"
 $ :List of 4
  ..$ : chr "B  vs  A"
  ..$ : chr "B  vs  B"
  ..$ : chr "B  vs  C"
  ..$ : chr "B  vs  D"
 $ :List of 4
  ..$ : chr "C  vs  A"
  ..$ : chr "C  vs  B"
  ..$ : chr "C  vs  C"
  ..$ : chr "C  vs  D"
 $ :List of 4
  ..$ : chr "D  vs  A"
  ..$ : chr "D  vs  B"
  ..$ : chr "D  vs  C"
  ..$ : chr "D  vs  D"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55595826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档