在 data.table 中使用 lapply 从列表列中提取元素
Using lapply in data.table to extract element from a list column
我将 lm 摘要列表与 data.table 合并。
接下来,我从摘要中提取一个系数并生成一个包含该数字的新列。
我的问题是,为什么我必须使用lapply来完成这样的工作?
例如,以下代码有效。
new.DT <- old.DT[, result := lapply(X = results.of.lm, FUN = summary)] %>%
.[, beta := lapply(X = result, function(x) x$coefficients[2,1])]
虽然下面的代码失败了。
new.DT <- old.DT[, result := lapply(X = results.of.lm, FUN = summary)] %>%
.[, beta := result$coefficients[2,1])]
但是,对于我应用于 data.table 中的列的某些函数(例如粘贴、substr 或 as.numeric),lapply 不是必需的。
我无法弄清楚是什么导致了这种差异。谢谢!
假设 old.DT
看起来像这样:
grp results.of.lm
1: 1 <lm[12]>
2: 2 <lm[12]>
3: 3 <lm[12]>
然后,在使用 old.DT[, result:=lapply(results.of.lm,summary)]
创建结果列后,我们注意到 result
是列表的列表
grp results.of.lm result
1: 1 <lm[12]> <summary.lm[11]>
2: 2 <lm[12]> <summary.lm[11]>
3: 3 <lm[12]> <summary.lm[11]>
请注意 old.DT$result$coefficients 为 NULL,因此 beta:=result$coefficients[2,1]
不会 return 想要的结果。相反,您使用 lapply 会 return 系数:
old.DT[, beta:=lapply(result, function(x) x$coefficients[2,1])][]
grp results.of.lm result beta
1: 1 <lm[12]> <summary.lm[11]> -0.2819342
2: 2 <lm[12]> <summary.lm[11]> 0.1645671
3: 3 <lm[12]> <summary.lm[11]> 0.2215897
我将 lm 摘要列表与 data.table 合并。
接下来,我从摘要中提取一个系数并生成一个包含该数字的新列。
我的问题是,为什么我必须使用lapply来完成这样的工作?
例如,以下代码有效。
new.DT <- old.DT[, result := lapply(X = results.of.lm, FUN = summary)] %>%
.[, beta := lapply(X = result, function(x) x$coefficients[2,1])]
虽然下面的代码失败了。
new.DT <- old.DT[, result := lapply(X = results.of.lm, FUN = summary)] %>%
.[, beta := result$coefficients[2,1])]
但是,对于我应用于 data.table 中的列的某些函数(例如粘贴、substr 或 as.numeric),lapply 不是必需的。 我无法弄清楚是什么导致了这种差异。谢谢!
假设 old.DT
看起来像这样:
grp results.of.lm
1: 1 <lm[12]>
2: 2 <lm[12]>
3: 3 <lm[12]>
然后,在使用 old.DT[, result:=lapply(results.of.lm,summary)]
创建结果列后,我们注意到 result
是列表的列表
grp results.of.lm result
1: 1 <lm[12]> <summary.lm[11]>
2: 2 <lm[12]> <summary.lm[11]>
3: 3 <lm[12]> <summary.lm[11]>
请注意 old.DT$result$coefficients 为 NULL,因此 beta:=result$coefficients[2,1]
不会 return 想要的结果。相反,您使用 lapply 会 return 系数:
old.DT[, beta:=lapply(result, function(x) x$coefficients[2,1])][]
grp results.of.lm result beta
1: 1 <lm[12]> <summary.lm[11]> -0.2819342
2: 2 <lm[12]> <summary.lm[11]> 0.1645671
3: 3 <lm[12]> <summary.lm[11]> 0.2215897