【发布时间】:2014-05-23 08:00:32
【问题描述】:
假设我有一个 data.table,其中一列包含线性模型:
library(data.table)
set.seed(1014)
dt <- data.table(
g = c(1, 1, 2, 2, 3, 3, 3),
x = runif(7),
y = runif(7)
)
models <- dt[, list(mod = list(lm(y ~ x, data = .SD))), by = g]
现在我想从每个模型中提取 r 平方值。我可不可以做 比这个好吗?
models[, list(rsq = summary(mod[[1]])$r.squared), by = g]
## g rsq
## 1: 1 1.000000
## 2: 2 1.000000
## 3: 3 0.004452
理想情况下,我希望能够消除 [[1]] 而不是依赖
知道前一个分组变量(我知道我希望每一行都是
它是自己的组)。
【问题讨论】:
-
也许您应该解释一下您是否期望
data.table具有某些标准,或者您为什么需要这个?给定models并要求r.squared,除了按g分组,我只能想到使用lapply(...),然后将结果添加为新列。 -
您可以按
1:nrow(models)分组以避免“了解”g -
@arun 如果您知道您正在处理单个行,您可以在内部使用
[[而不是[。这就是我对 dplyr 的想法(带有特殊的行分组器),我想知道数据表是否已经具有类似的功能。 -
就因为我不知道更好,为什么使用
[[1]]值得避免? -
@DeanMacGregor 因为在这种情况下它是多余的
标签: r data.table