2

このようなデータがあります。そして、以下の私のコードは、単にいくつかの値を計算し、出力ベクトルを元のデータフレームにバインドします。

options(width=200)

args<-commandArgs(trailingOnly=FALSE)
dat <- read.table("http://dpaste.com/89376/plain/",fill=T);

problist <- c();

for (lmer in 1:10) {
   meanl <- lmer;
   stdevl <- (0.17*sqrt(lmer));
   err_prob <- pnorm(dat$V4,mean=meanl, sd=stdevl);
   problist <- cbind(problist,err_prob);
}

dat <- cbind(dat,problist)
#print(dat,row.names=F, column.names=F,justify=left)

# Why this breaks?
write(dat, file="output.txt", sep="\t",append=F);

上記に関していくつか質問があります。

  1. しかし、なぜ上記の'write()'関数がこのエラーを出すのですか。それを修正する方法はありますか?

    cat(list(...)、file、sep、fill、labels、append)のエラー:引数1(タイプ'list')は'cat'では処理できません呼び出し:write->cat実行が停止しました

  2. データフレーム内のバインドされたベクトルの名前は、10個の新しい列すべてに対して「errprob」として追加されます。「errprob1」、「errprob2」などの名前を付ける方法はありますか?

4

2 に答える 2

4

まず、セミコロンは必要ありません。Rは、行の終わりが切れ目であることを知っています。


for (lmer in 1:10){
    meanl <- lmer
    stdevl <- (0.17*sqrt(lmer))
    err_prob <- pnorm(dat$V4,mean=meanl, sd=stdevl)
    problist <- cbind(problist,err_prob)
}
colnames(problist)<-paste("errorprob",1:10,sep="")
dat <- cbind(dat,problist)
write.table(dat, file="output.txt", sep="\t",append=F)

  1. あなたはwrite.table関数を探していると思います

  2. colnames関数を使用する

于 2009-09-04T05:02:16.743 に答える
2
  1. 上記で指定した引数で使用するには、write()の代わりにwrite.table()を使用できます。後者は行列の印刷に適しています(ただし、ncolの指定または入力行列の転置が必要になる場合があります)が、前者の方が一般的であり、行列とデータフレームの両方に使用します。

  2. 交換できます

    err_prob <-pnorm(dat $ V4、mean = meanl、sd = stdevl)

    problist <-cbind(problist、err_prob)

assign(sprintf("err_prob%d",lmer),pnorm(dat$V4,mean=meanl, sd=stdevl))
problist <- eval(parse(text=sprintf("cbind(problist,err_prob%d)", lmer)))

最後の行は、文字列を式として解析してから評価します。代わりに行うことができます

colnames(problist) <- sprintf("err_prob%d",1:10)

事後

于 2009-09-04T04:50:48.967 に答える