問題を示す合成データセットを提供することから始めさせてください:
Do <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), each=16,times=16)
Cl <- rep(c("K", "Y","M","C"), each= 384, times=4)
In <- rep(c("A", "S"), each=3072)
Sa <- rep(c(1,2), each=1536)
Data <- rnorm(6144)
DataFrame <- cbind.data.frame(Do,Cl,In,Sa,Data); head(DataFrame)
rm(Do,Cl,In,Sa,Data)
attach(DataFrame)
次に、予測不能なリサイクルを避けるために、「DataFrame」オブジェクトを複数のリストに分割します。基本的に、サイクリングが予測可能で、シミュレーターで正しい出力が生成されるように、各データサブセットを個別のリストに配置しています。
DFSplit <- split(DataFrame[ , "Data"], list(Do, Cl, In, Sa))
「DFSplit」オブジェクトには 384 個のリストがあります
length(names(DFSplit))
次に、リスト名を識別する関数「ids」を作成しました
ids <- function(Do, Cl, In, Sa){
grep( paste( "^" , Do, "\\.",
Cl, "\\.",
In,
"\\.", Sa,sep=""),
names(DFSplit), value = TRUE)}
mapply(ids, Do, Cl, In, Sa, SIMPLIFY = FALSE)
各 'ids' 引数の長さは 6144 であると理解しています。mapply は、16 回繰り返される 384 個のリストを生成します。mapply が同じ名前を 16 回繰り返さないように ids 関数を変更するにはどうすればよいですか。醜くて非常にコストのかかる解決策として、私はユニークを使用しました。もっと根本的な解決策が必要です。
unique(mapply(ids, Do, Cl, In, Sa, SIMPLIFY = FALSE))
「DFSplit」リストを操作する関数も作成しました。以前の機能と同じ問題があります。問題は、前の関数を入力として受け入れることです。
dG <- function(Do,Cl, In, Sa){
dg <- 100*
(1-10^-( DFSplit[[ids(Do, Cl, In, Sa)]] - DFSplit[[ids(0, Cl, In, Sa)]])) /
(1-10^-( DFSplit[[ids(100, Cl, In, Sa)]] - DFSplit[[ids(0, Cl, In, Sa)]])) - Do
dg}
mapply(dG, Do, Cl, In, Sa, SIMPLIFY = FALSE)
私がしようとしているのは、384 個のリストのそれぞれに dG 関数を適用することです。dG 機能も変更する必要があることを認めますが、その方法はわかりません。dG 関数への入力を、それぞれ 16 個の数字を含む 384 個のリストの名前にしたいと考えています。dG を適用した 384 リストを出力したいと考えています。
一緒に別の解決策を提案してください。重要なことは、「dG」関数をデータ セットに適用する必要があることです。