Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R data.table在单个data.table中具有多个组的操作以及具有Lappy的外部函数_R_Data.table - Fatal编程技术网

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]

如果您愿意,应该清楚地知道如何在函数中更改do
get

您的函数必须具有参数
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]

如果您愿意,应该清楚地知道如何在函数中更改do
get

您的函数必须具有参数
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]

如果您愿意,应该清楚地知道如何在函数中更改do
get

您的函数必须具有参数
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]
如果您愿意,应该清楚地知道如何在函数中更改do
get

我会保持简单:

fun我会保持简单:

fun我会保持简单:

fun我会保持简单:


fun谢谢你的建议。谢谢你的建议。谢谢你的建议。谢谢你的建议。谢谢你的建议代码,但在我的实际案例中,我有12列,所以我宁愿使用eddi的代码。谢谢你的建议代码,但在我的实际案例中,我有12列的集合,我正在处理,所以我宁愿使用eddi的代码。谢谢你的建议代码,但在我的实际案例中,我有12列的集合,我正在处理,所以我宁愿使用eddi的代码。谢谢你的建议代码,但在我的实际案例中,我有12个列的集合,所以我宁愿使用eddi的代码。