看板 Statistics 關於我們 聯絡資訊
提供另外一種想法 把資料截短並補0,堆成矩陣後再加總 data <- seq(1:10) n <- 3 x <- data for(i in 1:(n-1)){ x <- rbind(x, c(rep(0,i),data[-((length(data)-i+1):length(data))])) } apply(x, 2, sum) ※ 引述《andrew43 (apan)》之銘言: : 這是改寫過的 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 : : 請問有甚麼辦法可以解決嗎,感謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.179.32