r - 在函数内找不到 lapply data.table 的对象

标签 r data.table

假设我有以下 R 代码:

library(data.table)
L <- list(a=data.table(x=c(1,2,3),y=c(10,20,30)),
          b=data.table(x=c(4,5,6),y=c(40,50,60)),
          c=data.table(x=c(7,8,9),y=c(70,80,90)))


columnName <- "x"         
r <- lapply(L,"[",i=get(columnName) %in% c(1,4))

f <- function(L1) {
     columnName1 <- "x"
     r1 <- lapply(L1,"[",i=get(columnName1) %in% c(1,4))
     return(r1)
}

r1 <- f(L)

我的问题是:为什么在函数内部对底部 r1 的赋值失败

Error in get(columnName1) : object 'columnName1' not found



对 r 的进一步分配工作正常。同样,如果在函数内部,我通过 <<- 将其更改为 columnName1 的全局赋值,但随后我创建了一个我并不真正想要的全局变量.... 我怎样才能干净利落地重写这样的数据。表在其范围内找到 columnName1?我在范围界定方面缺少什么?我原以为如果在“[”函数中找不到 columnName1,它会“向上”查找一个环境并在那里找到它?它必须查看全局环境,而不是父级?

最佳答案

我猜你想从 data.table 返回什么.如果您希望返回列 x 的行等于 1 和 4 通常更容易让它与列表中的单个值一起工作,然后让它与 lapply 一起工作。

library(data.table)
columnName1 <- "x"
L$a[get(columnName1) %in% c(1,4)]

遍历列表
lapply(L, function(x) x[get(columnName1) %in% c(1,4)])

如果你想要一个可以指定列名和行号的函数
f <- function(list, col, row) {lapply(list, function(x, lcol, lrow) x[get(lcol) %in% lrow], lcol=col, lrow=row)}
f(L, "x", c(1,4))

关于r - 在函数内找不到 lapply data.table 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271469/

相关文章:

r - 构建自己的包但加载后命名空间为空

r - 无法格式化数据框中的日期

r - 在 R 中分组数据后使用用户定义的函数

r - 如何使用 data.table 对因子变量进行单热编码?

每组内排名

轻松替换 R 中的多个单词; str_replace_all 给出两个对象长度不相等的错误

r - 在 data.table 的 j 参数中使用 "list"

r - 从现有数据框或数据表创建多个虚拟对象

r - 在查找表中使用多个引用值

r - 使用 R data.table 对高频时间序列进行子集化(用 data.table 替换 xts 功能)