【问题标题】:How to compactly define a list?如何紧凑地定义一个列表?
【发布时间】:2019-06-14 11:50:17
【问题描述】:

这就是我现在拥有的:

models = list()
models$A = 5700
models$Ą = 8600
models$B = 12400
models$C = 10000
models$Ć = 14900
models$D = 12200
models$E = 7700
models$Ę = 9800
models$F = 3600
models$G = 13200
models$H = 8400
models$I = 5500
models$J = 14900
models$K = 8200
models$L = 9900
models$Ł = 7100
models$M = 7100
models$N = 9300
models$Ń = 12100
models$O = 10200
models$Ó = 5600
models$P = 14200
models$R = 15000
models$S = 14800
models$Ś = 8800
models$T = 10400
models$U = 8500
models$W = 13300
models$Y = 7000
models$Z = 8000
models$Ź = 7800
models$Ż = 12400

我拒绝相信上面是初始化这样一个列表的最简单方法。

R 中是否有任何列表文字语法?

【问题讨论】:

  • 您的输入和预期输出是什么?您的问题不清楚,请根据How to make a great R reproducible example阅读并编辑您的问题,以便其他用户帮助您。
  • @PoGibas 为什么重要?我只希望有我上面展示的这样一个关联。我希望 models[['A']] 评估为 5700。如果输入/输出真的很重要:我的目录中有文件,其名称格式为 A_model_5700Z_model_8000 等 - 所以我想对关联进行硬编码,以允许程序随后打开正确的文件。跨度>
  • @PoGibas 为什么我的问题不清楚?我不知道如何制作一个可运行的示例 - 除了提供一些人工代码,例如print(models[['Z']]) # should print 8000。我想要一个更短的代码,相当于我上面写的,仅此而已。定义一个列表是否算作可重现的效果?
  • 谢谢!现在我明白了

标签: r list initialization literals


【解决方案1】:

您可以查看?as.list。如果您有一个命名列表,它将直接分配名称

x <- c(A = 5700, B = 8600, C = 12400, D = 10000)
as.list(x)
#$A
#[1] 5700

#$B
#[1] 8600

#$C
#[1] 12400

#$D
#[1] 10000

或者,如果您有不同的数字和名称,您可以使用setNames 来命名它们

x <- c(5700, 8600, 12400, 10000)
setNames(as.list(x), LETTERS[1:4])

【讨论】:

  • 或者这个 - setNames(as.list(lapply(strsplit(files, "_"), "[[", 3)), sub("_.*", "", files))
猜你喜欢
  • 2017-07-03
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多