我想使用dplyr中的data.frame返回函数来读取我想要轻松配置其位置的Excel文件中的数据。在这里,我使用简化的get_table()函数和两个生成的data.frames来表达我的问题。实际上,get_table()函数从服务器获取数据并对其进行解析。
从dplyr调用函数时,应合并所有data.frame结果。这是简化的代码:
files <- read.table(header=T, text='
type filename
A A_table
B B_table
')
A_table <- read.table(header=T, text='
area observations
K1 5
K2 9
')
B_table <- read.table(header=T, text='
area observations
K1 23
K2 28
K3 1
')
get_table <- function(name) {
return(get(name))
}
我可以用lapply读取文件:
list <- as.vector(files[,2])
t <- lapply(list, get_table)
do.call("rbind", t)
并将结果合并到:
area observations
1 K1 5
2 K2 9
3 K1 23
4 K2 28
5 K3 1
但是我想学习dplyr风格做同样的事情(但是工作 - 这不会):
files %>%
select(filename) %>%
rowwise() %>%
get_table()
答案 0 :(得分:2)
如@Richard Scriven所述,filename
应该是性格。
files <- read.table(header=T, stringsAsFactors=FALSE, text='
type filename
A A_table
B B_table
')
将do
应用于代码的最后一行,可获得与lapply(files[ ,2], get) %>% rbind_all
相同的结果。
files %>%
rowwise() %>%
do(get_table(.$filename))
#Groups: <by row>
# area observations
#1 K1 5
#2 K2 9
#3 K1 23
#4 K2 28
#5 K3 1