2017-03-13 12 views
-1

行方向のしきい値以下のすべての値を0に置き換えるデータフレーム(強度)があります。しきい値は、それぞれの行の最大値の80%です。結果は、私はこれを試みた新しいデータフレーム行方向のしきい値以下のデータフレームの値を置き換えます。R

としてリコールセーフされるべきである:

cutoff <- function(x){ 
x[x < 0.8* max(x)] <- 0 
} 

filter_int <- t(apply(X= intensities, MARGIN = 1, FUN= cutoff)) 

これを実行して、filter_intは全てゼロと一列です。何か案は?

答えて

0

古典的な問題。 R関数は最後の行から返された値を返します。あなたが何かを割り当てると、Rはあなたが割り当てた値を目に見えない形で返します。あなたの場合、それは0です。あなたがapplyを使用する場合は、

cutoff <- function(x){ 
x[x < 0.8* max(x)] <- 0 
return(x) 
} 

それはこの場合すべての変数の行で行列を返すことを覚えておいてください:

は、これを解決するための明示的なreturn文を追加します。したがって、それを転置してからdata.frame()を使用してデータフレームに戻す必要があります。 forループは数年前と比べて非常に最適化されているので、これは実際には高速です。

df <- as.data.frame(
    replicate(10, sample(1:100,100)) 
) 

df2 <- df 
for(i in seq_len(nrow(df))){ 
    df2[i,] <- cutoff(df[i,]) 
} 
+0

ありがとうございます – Evve

関連する問題