क्या रन को तेज करने के उद्देश्य से लैपली फंक्शन या कुछ और के साथ नीचे लिखना संभव है। मेरे डेटासेट x पर 1.5 घंटे लगते हैं।

For ( row in 1:row){ if x[row]$time > 0}{
# do something 
}else{ 
#  do something else 
} 
r
-1
Sean 18 जिंदा 2020, 13:52

1 उत्तर

सबसे बढ़िया उत्तर

यह आपके पास इस समय की तुलना में तेज़ होगा:

NROW=1e5
NCOL=12
df = data.frame(
  time = rnorm(NROW),
  matrix(rnorm(NCOL*NROW),nrow=N)
)
colnames(df)[2:ncol(df)] = LETTERS[1:NCOL]

change_outlier <- function(x) {
   H <-  3 * IQR(x, na.rm = T)
   out1 <- round(median(x) - H)
   out2 <- round(median(x) + H)
   x[x < out1] <- out1
   x[x > out2] <- out2
   mean(x)
}

#set a new column with NA
df$new = NA
# if time > 0, do something on columns A to D, which is 2:5
df$new[df$time>0] = apply(df[df$time>0,2:5], 1, change_outlier)
# others, do on columns E to others
df$new[!(df$time>0)] = apply(df[!df$time>0,6:ncol(df)], 1, change_outlier)
0
StupidWolf 18 जिंदा 2020, 11:32