のために私は本当に私は「これを下回るdata.tableに示すように、すべての変数a
、b
、d
、g
& N
は複数のバージョンを持っているモデルを実行する関数を作成するために苦労していますcrm
名付けまし:Rループは一致data.table列
lnN
の値を計算し、見出しの同じ番号を持つ列にそれを置くために、以下の機能を実行している私は何をしようとしている
crm = data.table(
East = 26500,
North = c(115000, 120000, 125000, 130000, 135000, 140000),
rain = c(1049.61, 1114.31, 1361.61, 1407.2, 1499.56, 1654.13),
crop = 'Wheat', area = c(0.1718, 0.1629, 0.1082, 0.0494, 0.02, 0.004),
rn = c("10007", "10018", "10023", "10024", "10025", "10026"),
N1 = 184.262648839489, N2 = 180.312874871521, N3 = 178.615847839997,
N4 = 182.531626054579, a1 = 0.186117715072018, a2 = -0.0232731908915799,
a3 = 0.227017532149122, a4 = 0.162943230565506, b1 = 0.000478900233700419,
b2 = 0.000787931973696371, b3 = 0.000458478256537521, b4 = 0.000517304324750896,
d1 = -0.000328164576390286, d2 = -0.000112122093240884, d3 = 0.000112702113716146,
d4 = 7.40875908059628e-05, g1 = 4.04709473710477e-06, g2 = 3.68724096485995e-06,
g3 = 3.47214450131546e-06, g4 = 3.55825543257538e-06, key = 'rn'
)
。私。 a1
、b1
、d1
、g1
& N1
を使用すると、すべての2s、3s、4sの列lnN1
などが生成されます。
n <- 1:4
cols <- paste0("lnN",n)
for(i in 1:length(n)){
crm[,(cols) := lapply(.SD ,function (x) {
N = crm[,7+i]
a = crm[,11+i]
b = crm[,15+i]
d = crm[,19+i]
g = crm[,23+i]
a + (b*crm[,rain]) + (g*N) + (d*crm[,rain]*N)}), .SDcols = paste0("N",n)]
}
私はどこでもこれを実現する方法についての例を見つけるしたことはありません。私はmapply
を使ってみましたが、各変数のすべての反復をどのように反復処理するかはわかりません。ご協力ありがとうございました!どのように
"これを達成する方法については、どこにも例がありません。"この場合、あなたのデータ構造に欠陥があることを示唆していると思います。私は '(cols):='を4回上書きしているので、あなたがしようとしていることを理解することは非常に難しいと思います。とにかく、私は 'melt(crm、meas = patterns("^N "、"^a "、"^b "、"^d "、"^g ")、value.name = c "、" a "、" b "、" d "、" g "))と列番号で手を出すのではなく、そこから作業する方法を見つけることができます。 – Frank
@Frank提案していただきありがとうございます。私は不確実性の値を得るためにモンテカルロ法の一環として各変数の多変量データを生成する必要があるので、データをどのように構造化するかを考えることはできません。私はあなたの提案を見て、私ができることを見ます。 –
あなたが分析を繰り返すにつれて、@Frankが言ったことを考えると、2番目のほうがいいでしょう(しかし、 "^ N"は '' N '[0-9] ''のようなものかもしれません。 。これを行うと、あなたの数式を 'dd [、lnN:=。(a +(b * rain)+(g * N)+(d * rain * N))]'で適用することができ、必要に応じて 'group_by'を実行します。 –