0
我有一個M×N矩陣R的實數。分錄R [m,n]給出月份m和模擬n的股價回報。我想找出所有模擬中最早的一個月出現負回報。在R中查找行索引
我可以找到第一次出現負列表的每列,然後找到這些的最小值。但是有沒有更高效的方法?
問題:在R中最有效的方法是什麼?
我有一個M×N矩陣R的實數。分錄R [m,n]給出月份m和模擬n的股價回報。我想找出所有模擬中最早的一個月出現負回報。在R中查找行索引
我可以找到第一次出現負列表的每列,然後找到這些的最小值。但是有沒有更高效的方法?
問題:在R中最有效的方法是什麼?
可能有更快的方式,但在這裏,一個解決辦法:
set.seed(3)
dat <- matrix(
runif(n = 120, -5, 100),
nrow = 12,
dimnames = list(paste0("month", 1:12), paste0("simulation", 1:10)))
head(dat, n = 7)
# simulation1 simulation2 simulation3 simulation4 simulation5 simulation6 simulation7 simulation8 simulation9 simulation10
# month1 12.644360 51.073712 19.87293 88.40622 27.97330 80.691136 89.84239 95.309603 29.05762 3.301263
# month2 79.789222 53.511191 78.07048 16.20436 79.06731 1.049364 96.45969 83.054696 27.15497 27.818028
# month3 35.418947 86.131546 57.97181 55.81453 19.07909 79.297071 49.10195 17.409618 14.34961 29.132973
# month4 29.412103 82.119413 90.56551 16.80136 17.36484 5.960723 52.69547 46.944923 66.39763 3.228478
# month5 58.220571 6.702161 53.84458 24.55422 87.09560 75.493632 12.19059 61.805647 75.46546 10.773076
# month6 58.461376 68.887278 74.34900 77.55953 99.28831 27.005109 12.28268 91.714596 66.62388 11.004632
# month7 8.086512 89.236268 34.81305 13.16703 83.64594 75.775179 77.56494 -3.766876 16.95873 90.909478
which(apply(dat, MARGIN = 1, FUN = function(currentRow) {
any(currentRow < 0)
}))[1]
爲了提高效率,你可以嘗試
which.min(matrixStats::rowMins(dat)>0)
你能提供你寫的代碼可重複的數據?這將幫助OS用戶支持你。 – jazzurro