→ windguide:謝謝a大提供的解法,我來好好研究看看,THX 03/16 21:57
這是改寫過的 r code, 內容是在迴圈內只要 sum(data[(i-2):i]) 不合法則改成
sum(data[(i-2+j):i]), 其中 j = {0,1,2,...}.
請參考看看.
R 的例外處理我不是很在行,
但你的這個問題是很典型的例外處理.
data <- seq(1:10)
new.data <- c()
for(i in 1:10){
j <- 0
expr <- expression(sum(data[(i-2+j):i])) #建立表達式 ("2"可以自己調)
a.try <- try(eval(expr), T) #建立表達式的例外
while("try-error" %in% class(a.try)) { #若有例外
j <- j + 1
a.try <- try(eval(expr), T)
cat(sprintf("Error happened when i=%g and j=%g\n", i, j)) #顯示例外之處
}
new.data[i] <- a.try
}
new.data
※ 引述《windguide (夜很深)》之銘言:
: [軟體程式類別]:
: R
: [程式問題]:
: 資料處理、迴歸、敘述統計、logistic、probit...等
: [軟體熟悉度]:
: 低(1~3個月)
: [問題敘述]:
: 各位好,我現在有一筆資料,想從這筆資料中產生新資料
: 例如 這筆資料是 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
: 新資料是前兩個資料點的加上本身共三個數字的和,以上述例子也就是,
: 1, 3, 6, 9, 12, 15, 18, 21, 24, 27
: 由於第一個資料點沒有前面的資料所以維持為1,第二個資料點是1+2=3
: 我想利用資料向量及for迴圈處理
: data=seq(1:10)
: new.data=c()
: for(i in 1:10){
: new.data[i] = sum(data[(i-2):i])
: }
: new.data
: 但是當data[-1] 的時候會出現問題 它給的值不是0
: 請問有甚麼辦法可以解決嗎,感謝各位
--
http://apansharing.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.71.198