2012-06-01 67 views
0

我試圖使用從供,只需例如創建多個對象(不準確):for循環輸出不同的對象r中

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

這不是我所期待的,而我需要輸出多個對象(不同的類),但是名稱與我的級別不同,例如:here grp1,grp2,grp3。 這些對象中的每一個都具有特定i列表的功能輸出。對不起,簡單的問題。

編輯:響應提供具體的例子:1

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: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) 
    } 
+0

你可以給你一個更完整的例子你想要做什麼?從你寫的,你正在尋找'lapply'。具體來說,'lapply(l_gr,mean)'。 – Justin

+0

@Justin請看我的具體例子,我最初沒有提供具體的答案,我使用的包可能不是每個人都在這個論壇感興趣..感謝 – SHRram

+0

包裝循環內的部分作爲一個函數,例如'do_stuff < - 函數(i){grp < - make.seq(link_gr,i); grp $ .od < - order.seq(input.seq = grp,n.init = 5,subset.search =「twopt」, twopt.alg =「rcd」,THRES = 3,draw.try = TRUE,等待= 1,touchdown = TRUE);收益率(GRP)}' – mnel

回答

3

請注意您的for循環是錯誤的。如果你在迴路中設置了grp <- 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 = "")))