我有大约10个数据帧。例如,这里有两个:
name <- c("A", "B", "C")
name.footnote <- c("this", "that", "the other")
class <- c("one", "two", "three")
class.footnote <- c("blank", "blank", "blank")
df1 <- data.frame(name, name.footnote, class, class.footnote)
df2 <- data.frame(name, name.footnote, class, class.footnote)
当我逐个删除列中的列时,我的代码运行正常。
library(dplyr)
df1 <- select(df1, -ends_with("footnote"))
我想编写一个循环来处理两个代码较少的dfs,但是无法使循环正常工作。我一直收到同样的错误消息:
Error in UseMethod("select_") : no applicable method for 'select_' applied to an object of class "character".
请参阅下面我尝试的一些循环代码。我错过了什么?
listofDfs <- list("df1","df2")
1
lapply(listofDfs, function(df){
df <- select(df, -ends_with("footnote"))
return(df)
}
)
2。
for (i in listofDfs){
i <- select(i, -ends_with("footnote"))
}
答案 0 :(得分:2)
在定义列表listofDfs <- list(df1,df2)
时尝试删除引号。如错误所述,当您使用引号时,列表中的元素是字符,而不是data.frame
所期望的select()
。
library(dplyr)
listofDfs <- list(df1,df2)
#using lapply
list_out1 <- lapply(listofDfs, function(df){
df <- select(df, -ends_with("footnote"))
return(df)
})
#using for loop
list_out2 <- vector("list", length(listofDfs))
for (i in seq_along(listofDfs)){
list_out2[[i]] <- select(listofDfs[[i]], -ends_with("footnote"))
}
您可以使用get
和assign
来处理原始字符列表,并在迭代时操纵全局环境中的dfs。
listofDfs <- list('df1','df2')
invisible(lapply(listofDfs, function(i){
df <- select(get(i, globalenv()), -ends_with("footnote"))
assign(i, df, envir = globalenv())
}))
for (i in listofDfs){
df <- select(get(i, globalenv()), -ends_with("footnote"))
assign(i, df, envir = globalenv())
}