建立一个可以计算多个向量元素的函数

时间:2018-11-12 10:35:04

标签: r

输入包含3个向量(X,R,N) 我想创建一个新向量,对每个元素使用向量X,R,N中的相应元素进行计算,计算结果为X *(1 + R / 100)^ N 我尝试过:

q4 = function(X, R, N) {

  tot <- X*(1+R/100)^N

}

但是它什么也没做... 这只是一个例子,'我想知道如何通过操纵其他向量的元素来创建新向量 谢谢

2 个答案:

答案 0 :(得分:0)

只要您记得返回输出,您的函数就可以正常工作。

q4 <-  function(X, R, N) {
  tot <- X*(1+R/100)^N
  tot
}

X <- c(1, 3, 4, 6, 7, 9)
R <- c(3, 4, 6, 7, 9, 2)
N <- c(8, 7, 5, 4, 5, 1)

q4(X, R, N)
# 1.266770  3.947795  5.352902  7.864776 10.770368  9.180000

在R中,您可以使用return()返回一个值。如果您有一个条件语句,并且一个条件可以让您尽早返回值,那么这很方便,但是在大多数情况下,仅调用要返回的对象就足够了。

让我演示。

q5 <-  function(X, R, N) {
  if (missing(N)) {
    return(X*(1+R/100))
  }
  tot <- X*(1+R/100)^N
  tot
}

q5(X, R)
# 1.03 3.12 4.24 6.42 7.63 9.18

return()之后的内容将不被评估,tot之后的内容将被评估。

q6 <-  function(X, R, N) {
  if (missing(N)) {
    return(X*(1+R/100))
    1 + 2
  }
  tot <- X*(1+R/100)^N
  tot
  1 + 2
}

q6(X, R)
# 1.03 3.12 4.24 6.42 7.63 9.18

q6(X, R, N)
# 3

答案 1 :(得分:0)

如上所述,即使没有return,您的函数也可以正常工作。但是,在前一种情况下,它会静默返回最后结果,而无需将其打印到控制台:

q4 = function(X, R, N) {
  tot <- X*(1+R/100)^N
}

set.seed(53260330)
x <- 1:10; y = 10:1; z = runif(10, 0, 10)

q4(x, y, z)

print(q4(x, y, z))
# [1] 1.843725  3.982180  3.230178  5.302991  6.178926  8.562266  ...

res <- q4(x, y, z)
res
# [1]  1.843725  3.982180  3.230178  5.302991  6.178926  8.562266  ...

与同一个函数比较,但返回:

q4_1 = function(X, R, N) {
  return(X*(1+R/100)^N)
}

q4_1(x, y, z)
# [1]  1.843725  3.982180  3.230178  5.302991  6.178926  8.562266  ...

我的个人观点:在函数主体中使用return,如果不是为了提高可读性,则至少是为了避免在函数似乎什么也不返回的情况下出现这种不愉快的经历,但这仅仅是因为它不会打扰打印它自己的输出。