[英]R Convert loop into function
我想稍微清理一下我的代碼,並開始在我的日常計算中使用更多函數(我通常會使用 for 循環)。 我有一個 for 循環的例子,我想把它做成 function。 我遇到的問題是如何在沒有循環的情況下逐步通過約束向量。 這就是我的意思;
## represents spectral data
set.seed(11)
df <- data.frame(Sample = 1:100, replicate(1000, sample(0:1000, 100, rep = TRUE)))
## feature ranges by column number
frm <- c(438,563,953,963)
to <- c(548,803,1000,993)
nm <- c("WL890", "WL1080", "WL1400", "WL1375")
WL.ps <- list()
for (i in 1:length(frm)){
## finds the minimum value within the range constraints and returns the corresponding column name
WL <- colnames(df[frm[i]:to[i]])[apply(df[frm[i]:to[i]],1,which.min)]
WL.ps[[i]] <- WL
}
new.df <- data.frame(WL.ps)
colnames(new.df) <- nm
我遍歷“frm”和“to”向量值的部分是我遇到的問題。 一個 go 如何在 function 中從 frm[1] 到 frm[2].. 等等(應用或其他方式)?
任何建議將不勝感激。
謝謝你。
您可以編寫一個 function ,它返回特定列范圍的每一行中最小值的列名。 我使用max.col
而不是apply(df, 1, which.min)
來連續獲得最小值,因為max.col
與apply
相比會更有效。
apply_fun <- function(data, x, y) {
cols <- x:y
names(data[cols])[max.col(-data[cols])]
}
使用Map
:
WL.ps <- Map(apply_fun, frm, to, MoreArgs = list(data = df))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.