我正努力拥抱apply
家庭,但仍然遇到麻烦。我最了解lapply
的简单情况(如下所示),但是遇到了更复杂的apply
函数的问题。
我有一个for
循环函数,该函数循环访问嵌套列表并添加一个新的子集列表。我该如何使用apply
系列函数来编写此代码?
mylist <- list(mtcars=mtcars, iris=iris)
mylist <- lapply(mylist,
function(sub) list(data=sub))
for (i in head(seq_along(mylist))){
mylist[[i]]$new <- mylist[[i]]$data[,c(1,4,5)]
}
哪个给:
> mylist$mtcars$new
mpg hp drat
Mazda RX4 21.0 110 3.90
Mazda RX4 Wag 21.0 110 3.90
Datsun 710 22.8 93 3.85
Hornet 4 Drive 21.4 110 3.08
> mylist$iris$new
Sepal.Length Petal.Width Species
1 5.1 0.2 setosa
2 4.9 0.2 setosa
3 4.7 0.2 setosa
4 4.6 0.2 setosa
答案 0 :(得分:0)
创建这样的嵌套列表不是必需的,并且使事情变得复杂。 保持简单:获取初始列表并为新表创建一个新列表。
olds <- list(mtcars=mtcars, iris=iris)
news <- lapply(mylist, function(df) df[, c(1, 4, 5)])
两个列表都具有相同的数据帧名称(“ mtcars”和“ iris”),因此很容易从news
列表和olds
列表中选择对应的数据帧彼此。
# access the new data frame from the old data frame `iris`
news[["iris"]] # news[["mtcars"]]
# returns the corresponding new data frame of the "iris" data frame.
# return original data frame
olds[["iris"]] # olds[["mtcars"]]