【问题标题】:Running a function with different size of vectors iteratively in R在R中迭代地运行具有不同向量大小的函数
【发布时间】:2021-07-23 17:32:45
【问题描述】:

我创建了一个函数(“analiz”),如下所示:

std_dev <- function(x) sd(x)/sqrt(length(x))

analiz <- function(x){
  sprintf("Mean: %.2f, StandardDev: %.2f", mean(x), std_dev(x))}

我想分别为以下变量运行函数(“analiz”):

vec1 <- sample(1:1000,10)
vec2 <- sample(1:1000,20)
vec3 <- sample(1:1000,50)
.
.
.
vec10 <- sample(1:1000,300)

如果不写 10 次“analiz(vecN)”,我怎么能做到这一点?

【问题讨论】:

  • 好吧,首先不要创建 10 个不同的 vec 变量。创建一个类似vec &lt;- lapply(c(10,20,50, ..., 300), function(x) sample(1:1000, x)的列表然后你可以做lapply(vec, analiz)
  • @MrFlick 非常感谢。但是,实际上我将它们全部创建为示例。在我的工作中,向量是不同的。

标签: r function loops


【解决方案1】:

我们将所有对象放入listmget,循环使用listlapply 并应用“分析”函数

lst1 <- mget(ls(pattern = "^vec\\d+$"))
lapply(lst1, analiz)

【讨论】:

  • 非常感谢,它成功了。你能解释一下“^vec\\d+$”部分吗?是正则表达式吗?我想学。
  • @uguros 它是一种正则表达式模式,用于检查以 (^) 子字符串 "vec" 后跟一个或多个数字 (\\d+) 结尾的对象名称 (@987654328 @) 的字符串
  • @uguros 如果您的对象名称不同并且没有模式,那么您可能必须手动获取列表中的那些,即list(vec1, vec2, vec3, ...., vecN)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 2020-11-23
  • 2019-08-05
  • 2018-08-15
  • 1970-01-01
  • 2019-11-10
相关资源
最近更新 更多