我有一堆数据框,我需要循环并行合并某些变量。
我试图将所有列表名称放在数组中:
list_names <- c('list1','list2','list3')
然后执行sapply
:
output <- sapply(list_names, function(x) rbind(main list,
select(as.name(x), col1, col2, col3, col4)))
我遇到的fisrt错误是:
Error in UseMethod("select_") :
no applicable method for 'select_' applied to an object of class "character"
我认为select语句不喜欢我传入x
而不是变量名。有没有办法可以说x是变量名?我以为as.name(x)
会这样做。
由于
答案 0 :(得分:1)
您可以尝试get
,它按列名检索数据:
可重复示例:
library(dplyr)
list_names = c("mtcars", "mtcars")
lapply(list_names, function(x) rbind(mtcars[1:3], select(get(x), mpg, cyl, disp)))
另一种方法是将每个list_names
转换为sym
(来自rlang
),并在调用select
时对其进行整理评估:
library(rlang)
lapply(list_names, function(x) rbind(mtcars[1:3], select(eval_tidy(sym(x)), mpg, cyl, disp)))
基准R等价物:
lapply(list_names, function(x) rbind(mtcars[1:3], select(eval(as.name(x)), mpg, cyl, disp)))
OP的例子:
output <- lapply(list_names, function(x) rbind(main_list,
select(get(x), col1, col2, col3, col4)))
或:
output <- lapply(list_names, function(x) rbind(main_list,
select(eval(as.name(x)), col1, col2, col3, col4)))