【问题标题】:Looping through variables with an iterative component使用迭代组件循环变量
【发布时间】:2017-11-15 07:16:43
【问题描述】:

我正在尝试遍历几个数据帧,这些数据帧都有一个标准名称,而不是最后一个整数字符。我正在尝试遍历数据框并对每个数据框执行一项任务,但我不知道如何按名称引用每个数据框。

for(i in 1:length(xyz)){
    approx(df & i & $X, df & i & $Y, xout=aim)
}

这本质上是我想要的格式,每次迭代都会增加数字 i 并因此增加数据框的名称,例如。 df1$X, df2$X, df3$X, df4$X...

我知道这段代码不起作用,但我不知道什么会起作用

【问题讨论】:

  • 将它们放入列表并申请 (lst1 <- mget(ls(pattern = 'df[0-9]+')); lapply(lst1, function(i) approx(i$X, ...)))
  • 一个让你自己的循环工作的相当老套的版本是approx(eval(parse(text = paste0("df", i, "$X"))), eval(parse(text = paste0("df", i, "$Y"))), xout = aim)。但是听@Sotos 并使用一个列表。
  • 我不完全理解@Sotos在这里使用的方法,这里的功能是如何应用的?
  • 我了解@Leo 使用函数连接变量名称的方法,但我不明白该列表方法将如何包含信息以及如何应用近似函数
  • @tombat7112:mget(ls(...)) 会将您的所有 data.frames 放入名为 lst1 的列表中。之后,您使用 lapply() 调用将函数 function(i) approx(i$X, i$Y, xout = aim) 应用于 data.frames 列表并打印输出,或通过分配 output <- lapply(...) 将其保存到另一个列表。

标签: r loops


【解决方案1】:

我这样做的方式是将它们放在一个列表中并进行迭代。使用mget,我们通过在ls() 中指定一个模式来获取感兴趣的对象,在您的情况下为df[0-9]+。最后使用lapply进行迭代。

lst1 <- mget(ls(pattern = 'df[0-9]+'))
lapply(lst1, function(i) approx(i$X, i$Y, xout = aim))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2021-02-01
    • 2021-10-23
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多