0

私は2つの関連する質問があります-私はRを正しく学ぼうとしているので、Rコースからいくつかの宿題の問題をやっています。彼らは私たちに相関のベクトルを返す関数を書かせています:

example.function <- function(threshold = 0) {
  example.vector <- vector()
  example.vector <- sapply(1:30, function(i) {
    complete.record.count <- # ... counts the complete records in each of the 30 files.
    ## Cutting for space and to avoid giving away answers.
    ## a few lines get the complete records in each 
    ## file and count them. 
    if(complete.record.count > threshold) {
      new.correlation <- cor(complete.record$val1, complete.record$val2)
      print(new.correlation)
      example.vector <- c(new.correlation, example.vector)
    }  
  })
  # more null value handling#
  return(example.vector)
}

関数が実行されると、相関値がstdoutに出力されます。印刷される値は小数点以下6桁まで正確です。だから私は私が良い値を取得していることを知ってnew.correlation.います返されるベクトルにはそれらの値が含まれていません。代わりに、それは順番に整数です。

> tmp <- example.function()
> head(tmp)
[1] 2 3 4 5 6 7

なぜsapply整数をベクトルにプッシュしているのか理解できませんか?ここで何が欠けていますか?

私は実際にはコア構造を理解していません。それは多かれ少なかれ:

some.vector <- vector()
some.vector <- sapply(range, function(i) {
  some.vector <- c(new.value,some.vector)
}

それはその冗長性においてひどく非Rのようです。チップ?

4

1 に答える 1

1

使用するsapply場合は、自分でベクトルを作成する必要はなく、それを拡張する必要もありません(sapplyすべての面倒を見る)。あなたはおそらくこのようなものが欲しいでしょう:

example.function <- function(threshold = 0) {
  example.vector <- sapply(1:30, function(i) {
    ## Cutting for space and to avoid giving away answers.
    ## a few lines get the complete records in each 
    ## file and count them. 
    if(complete.record.count > threshold) {
      new.correlation <- cor(complete.record$val1, complete.record$val2)
      }  else {
        new.correlation <- NA   
      }
    new.correlation #return value of anonymous function
  })
  # more null value handling#
  example.vector #return value of example.function
}

ただし、インデックスiが無名関数にどのように影響するかは不明であり、質問は再現できません...

于 2013-01-19T20:42:28.047 に答える