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
在那里@Frank2DT[,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)