for循环输出r中的不同对象 [英] for loop to output different objects in r

查看:140
本文介绍了for循环输出r中的不同对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to use for to create multiple objects from for, just example (not exact):

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级别不同,例如:here grp1,grp2,grp3。
这些对象中的每一个都具有特定i列表的函数输出。抱歉,简单的问题。

This is not what I am expecting, rather I need to output multiple objects (of different class) however the name is different with i level for example: here grp1, grp2, grp3. Each of these object has output of the function for particular i list. Sorry for simple question.

编辑:回复提供具体示例:

Edits: response to provide specific example:

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

same process report for 1:1:link_gr$n.groups

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

So I want create a for loop and output objects:

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)
    } 


推荐答案

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

Note that your for loops are wrong. If you set grp <- NULL within the loop, you'll just wipe your results variable with each iteration - probably not what you want. You need to put the variable initialisation outside the loop.

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

Note, too, that I'd suggest that you are still better off using a single variable instead of multiple ones. list objects are very flexible in R and can accomodate objects of different classes. You can do

 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 。这样的东西会起作用:

If you must insist on using different variables, consider ?assign and ?get. Something like this will work:

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

这篇关于for循环输出r中的不同对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆