【问题标题】:Create multiple vectors from list elements and apply a function in R?从列表元素创建多个向量并在 R 中应用一个函数?
【发布时间】:2021-12-20 18:15:08
【问题描述】:

对于这个问题,我正在尝试创建多个可以应用函数的向量。我使用的函数是patchwork::area

例如,如果我要使用patchwork 明确写出要绘制的设计区域,我会这样做:

library(patchwork)

# Explicitly writing out each area
design <- c(
  area(1, 1, 9, 9),
  area(1,10),
  area(2,10),
  area(3,10),
  area(4,10),
  area(5,10),
  area(6,10),
  area(7,10),
  area(8,10),
  area(9,10)
)

# example of what the plot area would look like
plot(design)

这看起来像:

基本上,我正在尝试自动化上面的design 向量。我尝试使用lapply 创建区域列表,如下所示:

# create some data
vals = seq(1:9)
maxVal <- max(vals)

# use lapply 
areaList <- lapply(vals, function(x) area(x, maxVal+1))

这将创建一个区域列表,不包括上面design 对象的第一行...但我不知道如何将其转换为上面的design 对象。

一个天真的尝试(不起作用)是做类似下面的代码(它试图包含design对象的第一行)

designTest <- c(area(1, 1, maxVal, maxVal), 
                areaList)

关于如何实现这一点的任何建议?

【问题讨论】:

  • area() 是否返回具有类特定 c() 函数的对象类?
  • 我不确定!?我什至不知道我怎么会发现这个!?例如,class(area(1,3)) 的类是:patch_area。但我不确定它是否具有特定于类的 c() 函数?
  • 你会使用?methods IIRC

标签: r patchwork


【解决方案1】:

你需要在绘图之前像这样组合areaList的元素:

library(patchwork)
library(purrr)

vals = seq(1:9)
maxVal <- max(vals)

areaList <- lapply(vals, function(x) area(x, maxVal+1))
a <- reduce(areaList, c)

plot(a)

这应该可行!

【讨论】:

  • 对于我已经困惑了几个小时的事情来说,这样一个简单的答案。完美运行。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-11-26
  • 2021-07-16
  • 2014-06-15
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多