我想将此功能编程并绘制到R
:
我一直在使用的代码是:
js <- sapply( seq(1,50, 1), FUN <- function(x) x^{-4})
pim <- sapply(seq(1,50, 1), FUN <- function(x) 2*pi*x)
beta <- function(x) sum(js*sqrt(2)*cos(pim*x))
虽然这会为每个点返回正确的值,但当我尝试使用曲线函数绘制它时,我遇到了麻烦,因为我得到的是:
Error in curve(beta, 0, 1) :
'expr' did not evaluate to an object of length 'n'
In addition: Warning messages:
1: In pim * x :
longer object length is not a multiple of shorter object length
2: In js * sqrt(2) * cos(pim * x) :
longer object length is not a multiple of shorter object length
你能帮我解决这个问题,并获得一个有效的情节吗?谢谢。
答案 0 :(得分:4)
错误发生在您的beta
功能中。当您使用sum
时,它取 t = 1,...,T 的整个向量的总和。你不想这样做。相反,您想要为每个 t 评估该函数。因此,只需对beta
进行少量更改,即可使用curve
函数。
js <- sapply( seq(1,50, 1), function(x) x^{-4})
pim <- sapply(seq(1,50, 1), function(x) 2*pi*x)
beta <- function(x) {
sapply(x, function(y) sum(js*sqrt(2)*cos(pim*y)))
}
curve(beta, 0 ,1)
答案 1 :(得分:2)
我很惊讶你们都在这些函数中使用new.df <- df7 %>%
group_by(., date, users_user_id) %>%
summarise(., day_avg_hr = mean(avg_heart_rate)) %>%
ungroup() %>%
left_join(df7, .)
。该公式几乎可以简单地复制到R:
sapply
您可以在函数beta <- function(x, n=50){
j <- seq_len(n)
sum(
j^(-4)* sqrt(2) * cos(2*j*pi*x)
)
}
中使用包含x
的任何表达式:
curve
给出相同的情节。
旁注:如果你希望curve(sapply(x,beta),0,1)
被矢量化,你确实可以在里面添加beta
,或者你可以这样做:
sapply
也可以。