0

些細なことかもしれませんが、私はこの問題を解決しようとしています:

1つは25列、もう1つは9列のフレームをデータ化する必要があります。ここで、従属変数が 25 列のデータ フレームにあり、独立変数が 9 列のデータ フレームにある多項式を適合させる必要があります。現時点では、列を結合して「my.data」というデータ フレームを作成したため、一度に 1 つの独立変数を使用して従属変数をループしています。しかし、ループ内の関数を 25 * 9 回自動的に実行したいと思います。それを行う方法はありますか?

setwd("C:\\......")

 my.data <- read.table("MyData.txt", header = TRUE, sep = "\t")


for(i in seq_along(my.data))
 {

    fit1b <- lm(my.data[ ,i] ~ my.data$V1)
    fit2b <- lm(my.data[ ,i] ~ poly(my.data$V1, 2, raw=TRUE))
    fit3b <- lm(my.data[ ,i] ~ poly(my.data$V1, 3, raw=TRUE))
    poly1 <-capture.output(summary(fit1b))
    poly2 <-capture.output(summary(fit2b))
    poly3 <-capture.output(summary(fit3b))


con = file(description = "MyResults.txt", open="a")
write.table(poly1, file= con, append = TRUE, quote=F, col.names=FALSE, row.names= F)
write.table(poly2, file= con, append = TRUE, quote=F, col.names=FALSE, row.names= F)
write.table(poly3, file= con, append = TRUE, quote=F, col.names=FALSE, row.names= F)
close(con)
 }
4

2 に答える 2

1

mapplyこれは、使用する絶好の機会です。expand.grid

例えば。

# some dummy data
xx <- data.frame(replicate(5, runif(50)))
yy <- setNames(data.frame(replicate(3, runif(50))), paste0('Y',1:3))
# all combinations
cs <- expand.grid(list(pred = names(xx), resp = names(yy)), stringsAsFactors= FALSE)

# a function to do the fitting
fitting <- function(pred, resp, dd){
  # fit linear model
  ff <- reformulate(pred, resp)
  lmf <- lm(ff, data =dd)
  # create a formula for poly(,2)
  ff.poly2 <- update(ff, .~poly(.,2, raw=TRUE))
  # and poly(,3)
  ff.poly3 <- update(ff, .~poly(.,3, raw=TRUE))
  # fit these models
  lmp2 <- lm(ff.poly2, data = dd)
  lmp3 <- lm(ff.poly3, data = dd)
  # return a list with these three models
  list(linear = lmf, poly2 = lmp2, poly3 = lmp3)
}

biglist <- mapply('fitting', pred = as.list(cs[['pred']]), 
        resp = as.list(cs[['resp']]),
       MoreArgs = list(dd = cbind(xx,yy)), SIMPLIFY = FALSE)

# give this list meaningful names

names(biglist) <- do.call(paste, c(cs, sep = ':'))

lapply 次に、ネストされたステートメントを使用して、物事を抽出/要約できます

たとえば、すべての線形モデルの要約

lapply(lapply(biglist, `[[`,'linear'), summary)

二次モデルの

lapply(lapply(biglist, `[[`,'poly2'), summary)

print(summary(lm))単一のファイルから情報を抽出したい場合は、次のようなものです

capture.output(lapply(biglist, function(x) lapply(x, summary)), file = 'results.txt')

results.txtすべての結果が出力されたというファイルが作成されます。

于 2013-03-28T00:23:16.213 に答える
0
于 2013-03-28T01:42:12.430 に答える