【问题标题】:for loop to output different objects in rfor循环在r中输出不同的对象
【发布时间】:2012-06-01 03:17:03
【问题描述】:

我正在尝试使用 for 从 for 创建多个对象,只是示例(不准确):

l_gr <- list (1:10, 11:20, 21:30)
for (i in 1:length(l_gr)){
  grp <- NULL
  grp[[i]] <- mean(l_gr[[i]])
    }

这不是我所期望的,而是我需要输出多个对象(不同类)但是名称与 i 级别不同,例如:这里 grp1、grp2、grp3。 这些对象中的每一个都具有特定 i 列表的函数输出。对不起,简单的问题。

编辑:提供具体示例的响应:

install.packages("onemap")
require(onemap)
data(example.out)
twopts <- rf.2pts(example.out)
all.data <- make.seq(twopts,"all") 
link_gr <- group(all.data)
link_gr$n.groups

开始循环

  # without loop: 
# for 1
grp1 <- make.seq(link_gr, 1)
grp1.od <- order.seq(input.seq=grp1, n.init = 5,  subset.search = "twopt", 
    twopt.alg = "rcd", THRES = 3, draw.try = TRUE, wait = 1, touchdown=TRUE) 


# for 2
grp2 <- make.seq(link_gr, 2)
grp2.od <- order.seq(input.seq=grp2, n.init = 5,  subset.search = "twopt",  
   twopt.alg = "rcd", THRES = 3, draw.try = TRUE, wait = 1, touchdown=TRUE) 

1:1:link_gr$n.groups 的相同进程报告

所以我想创建一个 for 循环和输出对象:

for (i in 1:link_gr$n.groups){
    grp <- NULL
  grp[i] <- make.seq(link_gr, i)
  grp[i].od <- order.seq(input.seq=grp[i], n.init = 5,  subset.search = "twopt",  
      twopt.alg = "rcd", THRES = 3, draw.try = TRUE, wait = 1, touchdown=TRUE)
    } 

【问题讨论】:

  • 你能举一个更完整的例子来说明你正在尝试做什么吗?根据您所写的内容,您正在寻找lapply。具体来说,lapply(l_gr, mean).
  • @Justin 请看我的具体例子,我最初没有提供具体答案我使用的包可能对这个论坛的每个人都不感兴趣..谢谢
  • 将循环中的部分包装为一个函数,例如do_stuff &lt;- function(i){ grp &lt;- make.seq(link_gr,i); grp$.od &lt;- order.seq(input.seq=grp, n.init = 5, subset.search = "twopt", twopt.alg = "rcd", THRES = 3, draw.try = TRUE, wait = 1, touchdown=TRUE); return(grp)}

标签: r object if-statement


【解决方案1】:

请注意,您的 for 循环是错误的。如果您在循环中设置grp &lt;- NULL,您只需在每次迭代时擦除结果变量——可能不是您想要的。您需要将变量初始化放在循环之外。

还要注意,我建议您最好还是使用单个变量而不是多个变量。 list 对象在 R 中非常灵活,可以容纳不同类的对象。你可以这样做

 require(onemap)
 data(example.out)
 twopts <- rf.2pts(example.out)
 all.data <- make.seq(twopts,"all") 
 link_gr <- group(all.data)
 link_gr$n.groups

   # initialise list outputs
 grp = list()
 grp.od = list()
 for (i in 1:2){
 grp[[i]] <- make.seq(link_gr, i)
 grp.od[[i]] <- order.seq(input.seq=grp[[i]], n.init = 5,  subset.search = "twopt", 
     twopt.alg = "rcd", THRES = 3, draw.try = TRUE, wait = 1, touchdown=TRUE) 
 }

 #check out output
 str(grp)
 str(grp.od)
 grp[[1]]
 grp[[2]

如果您必须坚持使用不同的变量,请考虑?assign?get。这样的事情会起作用:

 i = 1
 assign(paste("grp", i, sep = ""), grp[[1]])
 exists("grp1")
 str(get(paste("grp", i, sep = "")))

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多