Хотя, несомненно, есть лучший способ сделать это (я имею в виду ручное назначение списка).

я есть 4 фрейма данных, которые содержат столбец даты, столбец цены и столбец возврата.

данными.1:

Date        Price  Return
2009-01-02  100    0.2
2009-01-03  110    0.1
etc.

data.2:

Date        Price  Return
2009-02-02  60    0.15
2009-02-03  50    -0.1
etc.

Я хотел бы настроить цикл и применить функцию плотность () к каждому фрейму данных, возвращая значения плотности для возвращаемых значений.

Я до конца о создании списка, создании цикла и использовании lapply () для этого, так

> ff <- list(data.1, data.2, data.3, data.4)
> for(i in 1:length(ff){
        density[[i]] <- lapply(ff, density(ff[[i]]$Return))}

но это, очевидно, не работает. Может ли кто-нибудь предложить мне помощь?

Заранее спасибо - Дани

Ответы на вопрос(2)

Решение Вопроса

вы должны инициализировать плотность, если вы хотите сделать это ручное назначение.

densities <- list()

Во-вторых, вы используете забавную функцию плотности. Вы должны указать другую функцию в вашем приложении. Либо вы задаете функцию и дополнительные аргументы после запятой, либо вы создаете свою собственную небольшую функцию в вызове lapply, как показано ниже.

data.1 <- data.frame(
    X1 = letters[1:10],
    X2 = 1:10
)

data.2 <- data.frame(
    X1 = letters[11:20],
    X2 = 10:1
)

ff <- list(data.1,data.2)

densities <- lapply(ff,function(i) {density(i$X2)})

Это возвращает список автоматически.

Чтобы извлечь из него данные, вы просто используете индексы списка:

densities[[1]]$x

Если вы назвали свой список раньше, вы также можете использовать имена:

names(ff) <- c("data.1","data.2")

densities <- lapply(ff,function(i) {density(i$X2)})
densities[['data.1']]$x
 Joris Meys25 янв. 2011 г., 13:11
@Dani: см. Мое редактирование.
 Dani25 янв. 2011 г., 15:01
Отлично! Спасибо большое
 Dani25 янв. 2011 г., 11:20
Нет проблем, спасибо за решение. Работает отлично! У меня есть один оставшийся вопрос: как я могу теперь получить доступ к значениям, которые рассчитывает плотность ()? Так, например, я хотел бы выбрать только значения x (которые будут возвращать) того, что плотность рассчитывается для меня. Densities [[1]] выбирает только результат для данных.1. Как теперь я могу выбрать только интерполированные значения x данных.1? плотности [[1 $ x]] не работает ...
 Dani25 янв. 2011 г., 10:49
Извините, я не понимаю. Плотность какого значения?
 Joris Meys25 янв. 2011 г., 10:52
@Dani: извините, моя ошибка, я прочитал неправильно

что вам не нужно использовать цикл for. Это должно работать:

data.1=data.2=data.3=data.4=matrix(rnorm(30),ncol=3)

ff=list(data.1,data.2,data.3,data.4)

densities=lapply(ff,function(x)density(x[,3]))

Хотя, несомненно, есть лучший способ сделать это (я имею в виду ручное назначение списка).

Ваш ответ на вопрос