不能 change/remove 使用 lapply 和 dplyr select 的数据框列表中的列吗?

Can't change/remove a column in a list of dataframes using lapply and dplyr select?

我有一个数据帧列表 L:

vec1 <- c("a", "b", "c", "d")
val <- c(11, 5443, 552, 9)
vec2 <- c("r", "p", "h", "y") 
val <- c(5, 9, 47, 23)

正在创建数据框:

df1 <- data.frame(vec1, val, stringsAsFactors = FALSE)
df2 <- data.frame(vec2, val, stringsAsFactors = FALSE)

L <- list(df1, df2)

现在我想删除 val 列,例如:

P <- lapply(L, function (y) {y$val <- NULL})

输出:

P <- lapply(L, function (y) {y$val <- NULL})
> P
[[1]]
NULL

[[2]]
NULL

运行 手动:

L[[1]]$val <- NULL
L
[[1]]
  vec1
1    a
2    b
3    c
4    d

[[2]]
  vec2 val
1    r   5
2    p   9
3    h  47
4    y  23

由于某些原因我不能这样做但是手动操作它有效,请指教。

P.S 我得到了列表(我没有创建它),但无法访问 val,因为 R 不知道它是什么。

Error in overscope_eval_next(overscope, expr) : 
  object 'val' not found 

使用 dplyr select 时,找不到 val 列:

library(dplyr)
P <- lapply(L, function (y) {select(y, -val)})

这两个命令对我都有效:

library(dplyr)

vec1 <- c("a", "b", "c", "d")
val <- c(11, 5443, 552, 9)
vec2 <- c("r", "p", "h", "y") 
val <- c(5, 9, 47, 23)

df1 <- data.frame(vec1, val, stringsAsFactors = FALSE)
df2 <- data.frame(vec2, val, stringsAsFactors = FALSE)

L <- list(df1, df2)

L

# [[1]]
#   vec1 val
# 1    a   5
# 2    b   9
# 3    c  47
# 4    d  23
# 
# [[2]]
#   vec2 val
# 1    r   5
# 2    p   9
# 3    h  47
# 4    y  23

lapply(L, function (y) {y$val <- NULL; y})

# [[1]]
# vec1
# 1    a
# 2    b
# 3    c
# 4    d
# 
# [[2]]
# vec2
# 1    r
# 2    p
# 3    h
# 4    y

lapply(L, function (y) {select(y, -val)})

# [[1]]
# vec1
# 1    a
# 2    b
# 3    c
# 4    d
# 
# [[2]]
# vec2
# 1    r
# 2    p
# 3    h
# 4    y