«Ошибка в` [[<-` (`* tmp *`, i, value =): такого индекса нет на уровне 1 », присваивающему для l oop результат для списка - PullRequest
1 голос
/ 07 января 2020

У меня есть список числовых векторов. Для каждого вектора я хочу определить значения x для пиков плотности ядра, используя для l oop. Запуск для l oop при печати результатов работает нормально. При попытке сохранить результаты в списке я получаю следующую ошибку:

"Ошибка в [[<- (*tmp*, i, значение = d $ x [c (F, diff (diff (d $ y)> = 0) <0)]): такого уровня нет на уровне 2 "</p>

Сообщение об ошибке в моем исходном коде

возвращает : "... нет такого индекса на уровне 1".

Может кто-нибудь помочь мне исправить эту ошибку? Код для извлечения значений x для пиков плотности ядра: Расчет пиков в гистограммах или функциях плотности , третий ответ.

set.seed(1234)

x <- list(col1 = c(rnorm(100, mean = 3), rnorm(100, mean = 4)),
          col2 = c(rnorm(100, mean = 3), rnorm(100, mean = 4)))

# Works fine
output <- vector("list", length(x))
for (i in (x)){
d <- density(i)
d$x[c(F, diff(diff(d$y) >= 0) < 0)] %>% print()
}

# Does not work
output <- vector("list", length(x))
for (i in (x)){
d <- density(i)
d$x[c(F, diff(diff(d$y) >= 0) < 0)] -> output[[i]]
}

Ответы [ 3 ]

1 голос
/ 07 января 2020

Это то, что вы ищете?

output <- vector("list", length(x))
j=0
for (i in (x)){
j=j+1
d <- density(i)
d$x[c(F, diff(diff(d$y) >= 0) < 0)] -> output[[j]]
}
1 голос
/ 07 января 2020

В вашем исходном коде i - это элементы в x, а не индекс элемента. Если вы хотите обновить output по индексу, вы можете попробовать код ниже

output <- list()
for (i in (x)){
d <- density(i)
d$x[c(F, diff(diff(d$y) >= 0) < 0)] -> output[length(output)+1]
}
1 голос
/ 07 января 2020

Поскольку x - это список, который нужно на l oop превысить индекс, чтобы сохранить выходные данные.

output <- vector("list", length(x))

for (i in seq_along(x)){
#Can also use 
#for (i in 1:length(x)){
  d <- density(x[[i]])
  d$x[c(F, diff(diff(d$y) >= 0) < 0)] -> output[[i]]
}

В качестве альтернативы, использование lapply автоматически даст вам список

lapply(x, function(i) {
   d <- density(i)
   d$x[c(F, diff(diff(d$y) >= 0) < 0)]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...