【问题标题】:Usage of iteration element within name pattern在名称模式中使用迭代元素
【发布时间】:2019-11-24 19:13:21
【问题描述】:

我想使用 for 循环遍历列表,将以下函数应用于所有列表元素:

new_x = do.call("rbind",mget(ls(pattern = "^x.*")))

其中x 是数据框的特定名称模式。 如何遍历列表元素 i 是我的函数的名称模式的列表? 目标是得到这样的东西:

for (i in filenames){
  i = do.call("rbind",mget(ls(pattern = "^i.*")))
}

所以我的问题基本上是如何在名称模式中使用i,所以我可以使用循环将数据框xpart1xpart2xpart3 的单独部分合并到@987654329 @; ypart1ypart2ypart3y 等等......

提前谢谢你!

【问题讨论】:

  • 你可以查看我的更新。

标签: r for-loop iteration


【解决方案1】:

如果我们使用for 循环,那么一个选项

v1 <- ls(pattern = "^x.*")
lst1 <- vector('list', length(v1))
for(i in seq_along(v1)){
        lst1[[i]] <- get(v1[i])
    }

do.call(rbind, lst1)

或者如果我们需要使用i来创建pattern,我们可以使用paste

lst1 <- vector('list', length(filenames))
names(lst1) <- filenames
for(i in filenames){
       lst1[[i]] <- get(ls(pattern = paste0(i, ".*")))
 }
do.call(rbind, lst1)

注意:get 返回单个对象的值,而mgetlist 中返回多个对象。如果我们使用for循环,我们假设它在循环中返回一个对象,并且只需要get


根据OP的说明,我们也可以使用mget

xs <- paste0("xpart", 1:100)
ys <- paste0("ypart", 1:100)
xsdat <- do.call(rbind, mget(xs))
ysdat <- do.call(rbind, mget(ys))

【讨论】:

  • 问题是,名称模式pattern = "^x.*" 中的x 变化大约n=100 次。基本上我想用这个循环将数据帧的单独部分xpart1xpart2xpart3 绑定到xypart1ypart2ypart3y 等等
  • @Mcgroger 我更新了帖子。根据您的第一个代码do.call("rbind",mget(ls(pattern = "^x.*"))),我不清楚。
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多