在R中绘制自定义函数的问题

时间:2017-04-07 13:21:14

标签: r

我想将此功能编程并绘制到R

enter image description here

我一直在使用的代码是:

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

你能帮我解决这个问题,并获得一个有效的情节吗?谢谢。

2 个答案:

答案 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)

enter image description here

答案 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

也可以。