这与dplyr
有关,我在调查上一个与ldply
相关的问题时碰巧遇到了这种情况。我一直在努力理解dplyr
。感谢SO上的一些帖子,我已经学到了很多东西。但是,我很难理解以下现象。
### Here is the sample data from my previous post.
time <- seq(as.Date("2014-09-01"), by = "day", length.out = 12)
temperature <- sample(c(15:26), replace = TRUE)
weather <- sample(c("clear", "cloudy", "rain"), size = 12, replace = TRUE)
rome <- data.frame(time, temperature, weather, stringsAsFactors = F)
time <- seq(as.Date("2014-09-01"), by = "day", length.out = 12)
temperature <- sample(c(12:23), replace = TRUE)
weather <- sample(c("clear", "cloudy", "rain"), size = 12, replace = TRUE)
paris <- data.frame(time, temperature, weather, stringsAsFactors = F)
### Assign names to each data frame and create a list
ana <- list(rome = rome, paris = paris)
如果我想选择第1列和第2列,lapply(ana,
[, 1:2)
会这样做。但是,我在实验中使用dplyr
,我想看看会发生什么。
ana %>%
lapply(., `[`, 1:2)
这返回了与lapply(ana,
[, 1:2)
完全相同的结果,这让我感到惊讶。我的理解是dplyr
用于数据框架。 ana在这里是list
。列表中有两个数据框,但ana仍然是一个列表。我进一步尝试了其他一些可能性。由于我对dplyr
的了解不够好,我的语法可能不对。在这种情况下,请纠正我。
ana %>%
do(function(x){
lapply(x,`[`, 1:2)
})
ana %>%
do({lapply(.,`[`, 1:2)
})
这些行返回了以下错误消息,这对我来说很有意义。
UseMethod出错(&#34;做&#34;):没有适用的方法来做&#39;做&#39;应用于 类的对象&#34; list&#34;
我的问题是为什么lapply
在第一次尝试中起作用。由于我在这里调用函数,我想do()
是必要的。在这种特定情况下,dplyr
应该返回错误消息,因为不应该使用列表。非常感谢您抽出宝贵的时间。