不能 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
我有一个数据帧列表 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