R 在Lappy中使用data.table时get中的第一个参数无效

R 在Lappy中使用data.table时get中的第一个参数无效,r,data.table,lapply,R,Data.table,Lapply,下面是一个数据表和一个返回列表的函数minmax: library(data.table) DT = data.table( x = c(1.59631745098427, -1.82698333087074, -1.69796526239799, -0.69409651665197, 0.360640961221989), y = c(-2.11104985109763, -1.49347081392737, 1.49801321753262, -0

下面是一个
数据表
和一个返回列表的函数
minmax

library(data.table)
DT = data.table(
  x = c(1.59631745098427, -1.82698333087074, -1.69796526239799, 
        -0.69409651665197, 0.360640961221989), 
  y = c(-2.11104985109763, -1.49347081392737, 1.49801321753262,
        -0.736044012256148, 1.68957962245701), 
  Factor1 = c("a", NA, "a", "a", "a"), 
  Factor2 = c("UU", "UU", "UU", "UU", "UU"), 
  Factor3 = c("GHI", "GHI", "DEF", "ABC", "DEF"), 
  x_FACTOR = c("(1,2]", "(-2,-1]", "(-2,-1]", "(-1,0]", "(0,1]"),
  y_FACTOR = c("(-3,-2]", "(-2,-1]", "(1,2]", "(-1,0]", "(1,2]"), 
  Factor1_FACTOR = c("a", NA, "a", "a", "a"),
  Factor2_FACTOR = c("UU", "UU", "UU", "UU", "UU"), 
  Factor3_FACTOR = c("GHI", "GHI", "DEF", "ABC", "DEF")
)

minmax <- function(x) list(min = min(x), max = max(x))

names(DT)
# [1] "x"              "y"              "Factor1"        "Factor2"        "Factor3"       
# [6] "x_FACTOR"       "y_FACTOR"       "Factor1_FACTOR" "Factor2_FACTOR" "Factor3_FACTOR"
但是在
lappy
中,我得到一个错误:

lapply(c("x", "y"), function(x) DT[, minmax(get(x))])
#  Error in get(x) : invalid first argument
非常奇怪的是,这来自一个闪亮的应用程序,其中上传了数据集,而对于其他数据集,我没有得到这个错误


编辑 我刚刚观察到,它的工作原理如下:

lapply(c("x", "y"), function(u) DT[, minmax(get(u))])

欢迎任何解释。

问题是有一列名为
x
,因此范围界定意味着
x
该列位于
x
Lappy的参数之前。你可以这样观察:

lapply(c("x", "y"), function(x) DT[, minmax({dput(x); get(x)})])
# c(1.59631745098427, -1.82698333087074, -1.69796526239799, -0.69409651665197, 0.360640961221989)

这一定与列的名称有关。我尝试将列
x
重命名为
z
,效果很好(就像您第二次尝试在函数中使用
u
时所做的那样)。因此,我猜测
x
定义之间存在冲突,它认为您指的是该列。请注意,我将用
as.list(range(x))
替换
minmax
,因为
range
在一次传递中同时计算
min
max
minmax
需要两次传递)这不是
的作用吗<代码>lappy(c(“x”,“y”),函数(x)DT[,minmax(get(…x))])工作。应该不需要
get
在那里@Frank2
DT[,minmax(…x)]
?我认为
.x
在不需要
get
的情况下工作会很好,但现在这不是
查找所做的,对吗?将其更改为
仅对列有用(而不是其他超出-
DT[]
变量)可能限制太多。。。是的,这是一个新帐户,因为我总是通过谷歌登录我的主帐户,在最近的一次工作变动后,我不想在工作中这样做。
lapply(c("x", "y"), function(x) DT[, minmax({dput(x); get(x)})])
# c(1.59631745098427, -1.82698333087074, -1.69796526239799, -0.69409651665197, 0.360640961221989)