【发布时间】:2020-02-01 15:10:53
【问题描述】:
这是一个 data.table 和一个函数 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"
我能做到:
DT[, minmax(get("x"))]
# min max
# 1: -1.826983 1.596317
但在lapply 内出现错误:
lapply(c("x", "y"), function(x) DT[, minmax(get(x))])
# Error in get(x) : invalid first argument
非常奇怪的是,这来自上传数据集的 Shiny 应用程序,而对于其他数据集,我没有收到此错误。
编辑
我刚刚观察到它是这样工作的:
lapply(c("x", "y"), function(u) DT[, minmax(get(u))])
欢迎任何解释。
【问题讨论】:
-
这一定和列名有关。我尝试将列
x重命名为z并且效果很好(就像您第二次尝试在函数中使用u一样)。所以我猜x定义之间存在冲突,它认为您指的是该列。 -
一个简短的说明,我会将
minmax替换为as.list(range(x)),因为range计算min和max一次通过(minmax需要两次通过)
标签: r data.table lapply