【问题标题】:Writing my own function编写我自己的函数
【发布时间】:2016-06-23 16:47:11
【问题描述】:

我是 R 的初学者,正在尝试编写 R 函数。我写的函数是这样的

male <- c(1:10)
female <- c(11:20)
msum <- function(h,j) {
for(i in 1:length(h)){ 
     e <- c()
    e[i] = h[i] + j[i]
    i = i+1
}
e
}

现在,当我通过 p &lt;- msum(male, female) 调用该函数时,我会寻找一个长度为 10 的向量的输出,结果是男性和女性向量的总和,但我得到的是一个长度为 10 的向量,NA 作为前 9 个位置的值和 30 作为向量的最后一个值。我哪里错了?

【问题讨论】:

  • 这是一个范围界定问题。您在 for 循环内定义了 e,但在循环外使用它
  • 你也不需要增加i,所以去掉i = i+1这一行
  • 另外,将函数命名为与基本 R 函数相同的名称可能会非常令人困惑(sum 已经存在)。
  • mysum &lt;- function(h, j) h + j怎么样

标签: r


【解决方案1】:

见:

male <- c(1:10)
female <- c(11:20)

msum <- function(h,j) {
  e <- c()
  for(i in 1:length(h)){ 

    e[i] = h[i] + j[i]
  }
  e
}
msum(male, female)

[1] 12 14 16 18 20 22 24 26 28 30

【讨论】:

  • e的内存尽可能提前分配,这里可以。 e &lt;- integer(length(h)) 而不是 e &lt;- c()
【解决方案2】:

我可能遗漏了一些东西,但我不知道您是否需要此示例的用户定义函数:

male + female

虽然我想你可以把它包装成一个函数:

vect_sum <- function(vec1, vec2) {
    vec1 + vec2
}
vect_sum(male, female)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多