Как использовать разные параметры на основе вектора для каждой итерации lapply?

У меня есть список векторов, для которых я применяю функцию lines для отображения содержимого каждого из элементов в списке. Пример кода следующий:

l <- list()
for(i in 1:10){l[[i]] <- rnorm(10)}
plot(l[[1]], t='n')
lapply(l, lines)

Есть ли способ сообщить lapply, что для каждого элемента используется другой параметр, например, цвет или тип линии, чтобы я мог легко присвоить соответствующие функции, которые я хочу, каждому элементу списка? Например, я хотел бы иметь вектор цветов, соответствующих определенному элементу в списке.


person pedrosaurio    schedule 08.04.2014    source источник
comment
Это быстрый и грязный подход: lapply(1:length(l),function(i)lines(l[[i]],col=i))   -  person jlhoward    schedule 08.04.2014


Ответы (2)


Я применил тот же сентиментальный подход, что и Джейховард. Вот пример, который окрашивает линию в зависимости от того, больше ли среднее значение нуля или нет:

lapply(l, function(line) {lines(line, col=ifelse(mean(line) > 0, 'red', 'blue'))})

Тем не менее, в вашем примере используется цикл для создания выборочных данных. Если ваш фактический код использует цикл, почему бы не отображать каждую строку как часть цикла генерации данных? Таким образом, вы можете рассчитать любые параметры графика, которые вам нужны, для каждой строки. Обычно я бы не рекомендовал использовать цикл, а не функцию применения — R очень медленно работает с циклами! Но если вы не рисуете десятки тысяч строк, вы, вероятно, не заметите большого снижения производительности. (Кроме того, имейте в виду, что подход lapply будет возвращать значение NULL для каждой построенной строки... что довольно неудобно.)

person FascinatingFingers    schedule 08.04.2014
comment
Спасибо за ваши предложения. Мой игрушечный пример использует цикл для создания списка примеров, но моя реальная проблема не создает список из цикла. - person pedrosaurio; 09.04.2014

Я обнаружил, что mapply это правильный путь

person pedrosaurio    schedule 08.05.2014