R data.table在单个data.table中具有多个组的操作以及具有Lappy的外部函数
我试图用这个问题和答案()来帮助我回答我之前提出的问题() 我在下面添加了一个修改后的示例:R data.table在单个data.table中具有多个组的操作以及具有Lappy的外部函数,r,data.table,R,Data.table,我试图用这个问题和答案()来帮助我回答我之前提出的问题() 我在下面添加了一个修改后的示例: library(data.table) constants <- data.table(252.164401, 3785.412, 453.59237) input1a <- data.table(ID = c(37, 45, 900), a1 = c(1, 2, 3), a2 = c(43, 320, 390), b1 = c(-0.94, 2.2, -1.223), b2 = c
library(data.table)
constants <- data.table(252.164401, 3785.412, 453.59237)
input1a <- data.table(ID = c(37, 45, 900), a1 = c(1, 2, 3), a2 = c(43, 320,
390),
b1 = c(-0.94, 2.2, -1.223), b2 = c(2.32, 4.54, 7.21), c1 = c(1, 2, 3),
c2 = c(-0.94, 2.2, -1.223))
setkey(input1a, ID)
dput(input1a)
structure(list(ID = c(37, 45, 900), a1 = c(1, 2, 3), a2 = c(43, 320, 390),
b1 = c(-0.94, 2.2, -1.223), b2 = c(2.32, 4.54, 7.21), c1 = c(1, 2, 3),
c2 = c(-0.94, 2.2, -1.223)), .Names = c("ID", "a1", "a2", "b1", "b2", "c1",
"c2"), row.names = c(NA, -3L), class = c("data.table", "data.frame"),
.internal.selfref = <pointer: 0x39c3f38>, sorted = "ID")
# input1a
# ID a1 a2 b1 b2 c1 c2
# 1: 37 1 43 -0.940 2.32 1 -0.940
# 2: 45 2 320 2.200 4.54 2 2.200
# 3: 900 3 390 -1.223 7.21 3 -1.223
多谢各位
更新 根据eddi的回答和Biogeek的更正(常数$V2而不是常数$constants[2]),这是我用来解决上述简化示例的代码
fun <- function(a, b, c) a - constants$V2 * (b - c)
input1a[, lapply(1:2, function(i) fun(get(paste0('a', i)),
get(paste0('b', i)),
get(paste0('c', i)))),
by = ID]
# ID V1 V2
# 1: 37 7344.6993 -12297.443
# 2: 45 -755.0824 -8537.864
# 3: 900 15988.7949 -31532.379
fun您的函数必须具有参数a
、b
和c
,但您只传递它a
。这就是错误
我不明白您为什么要在函数中执行get
,而我会执行以下操作:
# whatever function
fun = function(a, b, c) a + b + c
# evaluate inside the data.table, *then* pass it to your function
input1a[, lapply(1:2, function(i) fun(get(paste0('a', i)),
get(paste0('b', i)),
get(paste0('c', i)))),
by = ID]
如果您愿意,应该清楚地知道如何在函数中更改doget
。您的函数必须具有参数a
、b
和c
,但您只传递它a
。这就是错误
我不明白您为什么要在函数中执行get
,而我会执行以下操作:
# whatever function
fun = function(a, b, c) a + b + c
# evaluate inside the data.table, *then* pass it to your function
input1a[, lapply(1:2, function(i) fun(get(paste0('a', i)),
get(paste0('b', i)),
get(paste0('c', i)))),
by = ID]
如果您愿意,应该清楚地知道如何在函数中更改doget
。您的函数必须具有参数a
、b
和c
,但您只传递它a
。这就是错误
我不明白您为什么要在函数中执行get
,而我会执行以下操作:
# whatever function
fun = function(a, b, c) a + b + c
# evaluate inside the data.table, *then* pass it to your function
input1a[, lapply(1:2, function(i) fun(get(paste0('a', i)),
get(paste0('b', i)),
get(paste0('c', i)))),
by = ID]
如果您愿意,应该清楚地知道如何在函数中更改doget
。您的函数必须具有参数a
、b
和c
,但您只传递它a
。这就是错误
我不明白您为什么要在函数中执行get
,而我会执行以下操作:
# whatever function
fun = function(a, b, c) a + b + c
# evaluate inside the data.table, *then* pass it to your function
input1a[, lapply(1:2, function(i) fun(get(paste0('a', i)),
get(paste0('b', i)),
get(paste0('c', i)))),
by = ID]
如果您愿意,应该清楚地知道如何在函数中更改doget
。我会保持简单:
fun我会保持简单:
fun我会保持简单:
fun我会保持简单:
fun谢谢你的建议。谢谢你的建议。谢谢你的建议。谢谢你的建议。谢谢你的建议代码,但在我的实际案例中,我有12列,所以我宁愿使用eddi的代码。谢谢你的建议代码,但在我的实际案例中,我有12列的集合,我正在处理,所以我宁愿使用eddi的代码。谢谢你的建议代码,但在我的实际案例中,我有12列的集合,我正在处理,所以我宁愿使用eddi的代码。谢谢你的建议代码,但在我的实际案例中,我有12个列的集合,所以我宁愿使用eddi的代码。