我想從 while 回圈中獲取結果作為向量。我的代碼看起來像這樣,nld 只是一些數字資料,lk 代表一個國家的年費率:
i<-1
while (i<=length(nld)) {
lk<-((nld[i 1]-nld[i])/nld[i])*100
i <- i 1
print(lk) }
但輸出如下所示:
> [1] 2.34391
[1] 4.421947
[1] 0.6444809
[1] 11.29308
[1] 4.282817
[1] 1.773046
[1] 5.443044
[1] 6.332272
[1] 9.207917
[1] 6.173719
[1] 5.449088
[1] 3.977678
[1] 7.697896
[1] 6.313985
[1] 1.449447
[1] 5.149968
[1] 1.840442
[1] 2.628424
[1] 2.269874
[1] 4.195588
[1] -2.868499
[1] -2.764851
[1] 0.216549
[1] 1.907869
[1] -2.13202
[1] 4.637701
[1] 1.051423
[1] 3.946669
[1] 4.332345
[1] 6.260946
[1] 3.113528
[1] 1.537622
[1] 3.075729
[1] 2.925915
[1] 5.146445
[1] 6.129935
[1] 5.185049
[1] 3.45909
[1] 7.835161
[1] 9.649116
[1] 1.311721
[1] 0.3325002
... 等等。
我無法從這個回圈中獲取和繪制這些結果。如果有人能啟發我,我將不勝感激。提前致謝。
uj5u.com熱心網友回復:
i <- 1
result <- c()
while (i<=length(nld)) {
lk<-((nld[i 1]-nld[i])/nld[i])*100
i <- i 1
result <- c(result, lk) } # this collects `lk` in the vector `result`.
但是你正在做的是非常C-ish(或C -ish)。每當您在 R 或 Python 中看到索引和索引增量時,在 99% 的情況下,R 或 Python 中有更好的運算式。
例如,在這種情況下,您實際上正在nld使用 while 回圈 - 這并不好。
在 R 中,您將使用Map()- 它可以通過向量/串列并行迭代。
nld <- 1:10
result <- Map(f=function(x, y) (x - y)/y * 100,
nld[2:length(nld)],
nld)
但是你的原始代碼有錯誤。您從i=1to回圈i=length(nld)但需要nld[i 1]. 該i 1會在過去的情況下,需求的某事不存在。所以它應該是while (i < length(nld)) { ...
和
result <- Map(f=function(x, y) (x - y)/y * 100,
nld[2:length(nld)],
nld[1:(length(nld)-1)])
甚至更多的 R-ish:使用矢量化:
f <- function(x, y) (x-y)/y*100
> f(nld[2:length(nld)], nld[1:(length(nld)-1)])
## [1] 100.00000 50.00000 33.33333 25.00000 20.00000 16.66667 14.28571
## [8] 12.50000 11.11111
或者:
f <- function(vec) {
vec1 <- vec[2:length(vec)]
vec2 <- vec[1:(length(vec)-1)]
(vec1 - vec2)/vec1 * 100 # this uses vectorization!
}
f(nld)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/388187.html
上一篇:mc:ignorable可以用于創建XAML注釋標簽嗎?
下一篇:R-使用回圈創建多個變數
