1

code1<-c("AAA","BBB","DDD","EEE","FFF")200 個のアルファベット コード、2 個のアルファベット コードcode2<-c("Yyy","Zzzzz")、および 41 個の数値コードに従って分類された 1 つの変数を含むデータセットがありますcode3<-seq(1970,2011,1)

、 、の一意の値に従って、データの各サブセットから 8 数のベクトルを生成する関数がありcode1ます。そこで、これらのデータのサブセットごとに数行のコードを実行したいと思います。code2code3

完全なリストはデータフレームとしてインポートされ、data現在、データフレームからデータの各サブセットを抽出して分析し、出力を保存することで作業しています

問題は、このスキームに従ってcode1およびcode2のすべての値をループするのは面倒なことです。また、単一の出力データ フレームを生成し、8 つの数値を, ,の一意の値と一緒に保存する方がはるかに優れています。そしてそれらを生み出したもの。code3code1code2code3

これは、 code1-code3 および の値のループに頼らずに実行できると確信していますが、初心者なので、assign()完全にまとめることができないのではないかと心配しています。

ありがとう -- E

追加データ:

これは、私が実行している関数からの出力ベクトルがどのように見えるか、1 つのシリーズに対して手動でサブセット化したものです。

output1<-fxn(data$input,[which(data$code1=='AAA'&data$code2=='Yyy'&data$code3==1990)])
output2<-fxn2(output1)
str(output2$out[,2]): num [1:8] 0.009 0.648 0.304 0.004 0.445 ... 
output2$out[,2]: [1] 0.009 0.648 0.304 0.004 0.445 36.720 0.000 1.103

追加データ:

リクエストに応じて、この偽の出力データセットは、私が探しているものとほぼ同じです。ファイルの各行は、関数の 1 回の完了した実行からのものfxn2です。最初の 8 列は関数によって出力されます。code1code2、の一意の値を区別するために、最後の 3 列が追加されますcode3

> head(data)
   X.x1    x2    x3    x4    x5     x6 x7    x8 code3 code2 code1
1 0.008 0.595 0.185 0.005 0.173 36.744  0 1.102 1970  male  BGR
2 0.004 0.242 0.276 0.005 0.348 46.017  0 1.108 1971  male  BGR
3 0.002 0.553 0.242 0.005 0.247 35.424  0 1.107 1972  male  BGR
4 0.005 0.593 0.270 0.004 0.312 43.701  0 1.105 1973  male  BGR
5 0.009 0.660 0.217 0.005 0.266 37.955  0 1.103 1974  male  BGR
6 0.006 0.347 0.297 0.005 0.411 50.959  0 1.108 1975  male  BGR
> dput(head(data))
structure(list(X.x1 = c(0.008, 0.004, 0.002, 0.005, 0.009, 0.006
), x2 = c(0.595, 0.242, 0.553, 0.593, 0.66, 0.347), x3 = c(0.185, 
0.276, 0.242, 0.27, 0.217, 0.297), x4 = c(0.005, 0.005, 0.005, 
0.004, 0.005, 0.005), x5 = c(0.173, 0.348, 0.247, 0.312, 0.266, 
0.411), x6 = c(36.744, 46.017, 35.424, 43.701, 37.955, 50.959
), x7 = c(0, 0, 0, 0, 0, 0), x8 = c(1.102, 1.108, 1.107, 1.105, 
1.103, 1.108), year = 1970:1975, sex = structure(c(1L, 1L, 1L, 
1L, 1L, 1L), .Label = "male", class = "factor"), iso3 = structure(c(1L, 
1L, 1L, 1L, 1L, 1L), .Label = "BGR", class = "factor")), .Names = c("X.x1", 
"x2", "x3", "x4", "x5", "x6", "x7", "x8", "year", "sex", "iso3"
), row.names = c(NA, 6L), class = "data.frame")
4

1 に答える 1

1

これを行うことでコードを簡素化できると思います。希望する出力の詳細を教えていただければ、それに応じて回答を更新します。

code1<-c("AAA","BBB","DDD","EEE","FFF")
code2<-c("Yyy","Zzzzz")
code3<-seq(1970,2011,1) 
params <- expand.grid(code1, code2, code3)
names(params) <- c('code1', 'code2', 'code3')

myFunc <- function(code1, code2, code3) {
    ##add your function code here.
  ...
  ...
  return(output2$out[,2])
}

    LL <- mapply(FUN=myFunc, code1 = params$code1, code2 = params$code2, code3 = params$code3)
    result <- split(LL, rep(1:ncol(LL), each = nrow(LL)))
    result <- do.call(rbind, result)
    result <- cbind(result, params)         result <- cbind(result, params) 
于 2013-11-07T03:30:35.723 に答える