0

これを実行するとエラーメッセージが表示されますが、誰かにはっきりとわかるものはありますか?

 yo <-  function(x) {

      filt <- ddply(x, .(primer,day), summarise, count=sum(timepoints==0)) # this will tell you all primers that have a 0 hr time point by giveing a 1 in the count column



 if (any(filt$count) == 0)     { # this was the case once so I implemented this if else part

      filt <- filt[filt$count == 0,]
      include <-!(x$primer%in%filt$primer)&(x$day%in%filt$day) # all primers that have 0 hrs
      x <- x[include,] 
     ### for any given replicate, divide each timepoint by its zero hour 
     x <- ddply(x, .(primer),transform, foldInduction=realConc/realConc[timepoints==0])

}


  else {
x <- ddply(x, .(primer), transform, foldInduction=realConc/realConc[timepoints==0])
   }
  x[,-9]

  } 
4

2 に答える 2

3

はい、中括弧の配置。

あなたは書くことを奨励されています

 if (cond) {
     code
 } else {
     more_code
 }

パーサーが行ごとに進むとき -- のようなものを使用するかsource()、パッケージがビルドされ、ファイルが行ごとではなく「全体」で消費されるときに行われるように解析しない限り。

ただし、原則として、元の質問が示したスタイルを使用しないでください。

于 2012-10-13T03:44:11.863 に答える
1

私のコメントを回答に昇格させます。

any(filt$count) == 0ほとんど意味がありません。なんで?R のすべての論理強制と同様に、を表すany数値を取り、filt$countゼロの場合は true を返し、ゼロ以外の場合は 1 を返します。

> any(5)
[1] TRUE
Warning message:
In any(5) : coercing argument of type 'double' to logical

ただし、論理値になったら、数値と比較して強制的に数値に戻します。したがって、ステートメントが実際に行うことは、いずれかfilt$countがゼロであるかどうかを確認し (その場合は を返しますTRUE)、それを否定します。

> any( c(5,6,7) )==0
[1] FALSE
Warning message:
In any(c(5, 6, 7)) : coercing argument of type 'double' to logical
> any( c(5,6,0) )==0
[1] FALSE
Warning message:
In any(c(5, 6, 0)) : coercing argument of type 'double' to logical
> any( c(0) )==0
[1] TRUE
Warning message:
In any(c(0)) : coercing argument of type 'double' to logical

解決策:そうしないでください。

于 2012-10-13T12:04:24.370 に答える