【发布时间】:2020-02-27 16:32:11
【问题描述】:
对不起,这可能已经在其他地方得到了回答。我正在浏览别人的代码(没有足够的文档),我正在尝试运行以下命令:
rrd = rrm[,value:= value[type=="pku"] - value[type=="pk0"] , list(variable)]
rrm 是一个数据表。据我了解,我想按变量类型计算 pku 和 pk0 的差异,并将结果分配给名为“值”的新列。但是,如果我运行该命令,则会收到以下错误消息:
[.data.table(rrm, , := (value, { : 提供了 10 个项目以分配给“值”列中大小为 20 的组 1。 RHS 长度必须为 1(单个值即可)或与 LHS 长度完全匹配。如果您希望“回收” RHS,请明确使用 rep() 以向您的代码读者明确这一意图。
这个错误有什么变通方法/解决方案吗?
这是我的数据:
print.data.frame(rrm)
type variable value
1 pk0 mean 10.18634967
2 pku mean 10.19177697
3 pk0 mean 10.18323074
4 pku mean 10.18338736
5 pk0 mean 10.17690302
6 pku mean 10.17663512
7 pk0 mean 10.21680005
8 pku mean 10.21574084
9 pk0 mean 10.18142407
10 pku mean 10.18245526
11 pk0 mean 10.18865703
12 pku mean 10.18993432
13 pk0 mean 10.18469411
14 pku mean 10.18178037
15 pk0 mean 10.18555337
16 pku mean 10.18447134
17 pk0 mean 10.17899505
18 pku mean 10.17634073
19 pk0 mean 10.17541841
20 pku mean 10.17374883
21 pk0 median 10.12543247
22 pku median 10.13716609
23 pk0 median 10.12054280
24 pku median 10.13694067
25 pk0 median 10.12060491
26 pku median 10.13753156
27 pk0 median 10.12023764
28 pku median 10.13806559
29 pk0 median 10.12172742
30 pku median 10.13700781
31 pk0 median 10.12619102
32 pku median 10.14314559
33 pk0 median 10.12053163
34 pku median 10.14318633
35 pk0 median 10.12393058
36 pku median 10.13973191
37 pk0 median 10.11843975
38 pku median 10.13463409
39 pk0 median 10.11573985
40 pku median 10.12658083
41 pk0 d1 9.83848047
42 pku d1 9.85121517
43 pk0 d1 9.83260865
44 pku d1 9.85146830
45 pk0 d1 9.81911924
46 pku d1 9.82988272
47 pk0 d1 9.83539816
48 pku d1 9.84955729
49 pk0 d1 9.82875994
50 pku d1 9.84850104
51 pk0 d1 9.84339190
52 pku d1 9.86068047
53 pk0 d1 9.82926417
54 pku d1 9.82470032
55 pk0 d1 9.83447069
56 pku d1 9.85030651
57 pk0 d1 9.83186515
58 pku d1 9.85001546
59 pk0 d1 9.82491390
60 pku d1 9.81850133
61 pk0 d9 10.64305012
62 pku d9 10.62249295
63 pk0 d9 10.64863033
64 pku d9 10.59728566
65 pk0 d9 10.64945397
66 pku d9 10.61090461
67 pk0 d9 10.70287971
68 pku d9 10.68832242
69 pk0 d9 10.65037572
70 pku d9 10.60638526
71 pk0 d9 10.64889921
72 pku d9 10.61344703
73 pk0 d9 10.64698026
74 pku d9 10.61538660
75 pk0 d9 10.65100799
76 pku d9 10.61024106
77 pk0 d9 10.62840893
78 pku d9 10.57098697
79 pk0 d9 10.62886659
80 pku d9 10.62228710
81 pk0 var 0.13861818
82 pku var 0.15092039
83 pk0 var 0.13358830
84 pku var 0.12118053
85 pk0 var 0.14075433
86 pku var 0.13094447
87 pk0 var 0.23091842
88 pku var 0.20692249
89 pk0 var 0.13479935
90 pku var 0.12513323
91 pk0 var 0.13331305
92 pku var 0.12879185
93 pk0 var 0.13504633
94 pku var 0.13580084
95 pk0 var 0.13449477
96 pku var 0.11868215
97 pk0 var 0.13353367
98 pku var 0.12953169
99 pk0 var 0.13668670
100 pku var 0.14617279
101 pk0 var_eps 0.04579254
102 pku var_eps 0.07386206
103 pk0 var_eps 0.03936571
104 pku var_eps 0.04443490
105 pk0 var_eps 0.04138806
106 pku var_eps 0.05209369
107 pk0 var_eps 0.08396788
108 pku var_eps 0.09311348
109 pk0 var_eps 0.03867605
110 pku var_eps 0.04699705
111 pk0 var_eps 0.04505027
112 pku var_eps 0.05448253
113 pk0 var_eps 0.03982819
114 pku var_eps 0.06146928
115 pk0 var_eps 0.04107385
116 pku var_eps 0.04364253
117 pk0 var_eps 0.04020068
118 pku var_eps 0.05265849
119 pk0 var_eps 0.04064481
120 pku var_eps 0.06567682
121 pk0 var_pred 0.09282564
122 pku var_pred 0.07705833
123 pk0 var_pred 0.09422258
124 pku var_pred 0.07674563
125 pk0 var_pred 0.09936627
126 pku var_pred 0.07885078
127 pk0 var_pred 0.14695054
128 pku var_pred 0.11380901
129 pk0 var_pred 0.09612330
130 pku var_pred 0.07813618
131 pk0 var_pred 0.08826278
132 pku var_pred 0.07430932
133 pk0 var_pred 0.09521814
134 pku var_pred 0.07433156
135 pk0 var_pred 0.09342092
136 pku var_pred 0.07503962
137 pk0 var_pred 0.09333300
138 pku var_pred 0.07687320
139 pk0 var_pred 0.09604189
140 pku var_pred 0.08049596
编辑:
感谢您的回答。问题是 data.table 包的版本。上面提供的代码是在 1.12.0 版本下编写的,我使用的是 1.12.8。安装旧版本后,原代码没有问题。
【问题讨论】:
-
我认为这缺少聚合功能。
variable和type的每个组合都有 10 行,因此value[type=="pku"] - value[type=="pk0"]会产生一个 10 长度的向量。如果我们想按variable分组,我们应该告诉 R 如何总结这 10 个值。或者,如果我们确实希望每个type-variable有 10 个观察值,我们如何知道应该从哪个值中减去哪个值? -
听起来代码依赖于我们会自动回收值的旧行为(例如,如果您有一个包含 20 行的组,并且您返回 10 行,我们会将其复制为 20 行) .我们不再这样做,因为我们认为它容易出现静默错误;建议您查看其他建议以“现代化”代码并使其更安全
标签: r data.table