Вопрос по r, if-statement – цикл для вывода различных объектов в г

1

Я пытаюсь использовать для создания нескольких объектов для, просто пример (не точно):

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 (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
@Justin, пожалуйста, посмотрите мой конкретный пример, я изначально не предоставил конкретный ответ, который пакет, который я использую, может не заинтересовать всех на этом форуме .. спасибо SHRram
Оберните часть внутри цикла как функцию, напримерdo_stuff <- function(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, wait = 1, touchdown=TRUE); return(grp)} mnel

Ваш Ответ

1   ответ
4

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]

если тыmust настаивать на использовании различных переменных, рассмотрим?assign а также?get, Примерно так будет работать

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

Похожие вопросы