[英]How do I have mapply apply the function to each row of each data frame in a list?
[英]How do I apply a formula to each value in a data frame?
我創建了一個公式來計算數據的指數移動平均值:
myEMA <- function(price, n) {
ema <- c()
data_start <- which(!is.na(price))[1]
ema[1:data_start+n-2] <- NA
ema[data_start+n-1] <- mean(price[data_start:(data_start+n-1)])
beta <- 2/(n+1)
for(i in (data_start+n):length(price)) {
ema[i] <- beta*price[i] +
(1-beta)*ema[i-1]
}
ema <- reclass(ema,price)
return(ema)
}
我使用的數據是:
pricesupdated <- data.frame(a = seq(1,100), b = seq(1,200,2), c = c(NA,NA,NA,seq(1,97)))
我想創建一個數據框,在其中將公式應用於上述 data.frame 中的每個變量。 我的嘗試是:
frameddata <- data.frame(myEMA(pricesupdated,12))
但我得到的錯誤信息是:
h(simpleError(msg, call)) 中的錯誤:在選擇函數“mean”的方法時評估參數“x”時出錯:選擇了未定義的列
我可以打印我想要的答案,但不能創建數據框...
你能幫助我嗎?
首先myEMA()
是一個函數,而不是一個公式。 查看help("function")
和help("formula")
以了解區別的詳細信息。
myEMA()
函數將一個數值向量作為它的第一個參數,並返回一個與它的第一個參數具有相同維度的數值向量。
data.frame
對象data.frame
只是具有特殊類屬性的向量列表。 在列表中的每個元素上重復函數調用的最常見方法是使用*apply
函數系列之一。 例如,您可以使用lapply()
,它將對 priceupdated 中的每個變量調用一次pricesupdated
並返回一個列表,每個函數調用包含一個元素,其中包含該函數調用的返回值(一個數字向量)。 這個列表可以很容易地轉換回data.frame()
因為它的所有元素都具有相同的長度:
results <- lapply(pricesupdated, myEMA, n = 12)
# look at the structure of the results object
> str(results)
List of 3
$ a: num [1:100] NA NA NA NA NA NA NA NA NA NA ...
$ b: num [1:100] NA NA NA NA NA NA NA NA NA NA ...
$ c: num [1:100] NA NA NA NA NA NA NA NA NA NA ...
frameddata <- as.data.frame(results)
# look at the top 15 records in this object
> head(frameddata, 15)
a b c
1 NA NA NA
2 NA NA NA
3 NA NA NA
4 NA NA NA
5 NA NA NA
6 NA NA NA
7 NA NA NA
8 NA NA NA
9 NA NA NA
10 NA NA NA
11 NA NA NA
12 6.5 12 NA
13 7.5 14 NA
14 8.5 16 NA
15 9.5 18 6.5
這個問題可能是重復的,...但apply
-family 可能會有所幫助,例如
sapply(pricesupdated, myEMA, n=12)
為了可重復性,添加require(pec)
將是有益的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.