在R中乘以不同长度的向量

时间:2017-01-10 04:47:53

标签: r

我有一个功能:

v0 <- function(n) {
   seq(1:n)
}

我需要创建一个函数v1,它会给出这个结果:

(1 2 3 -4 -5 -6 7 8 9 -10)            # if n <- 10   or
(1 2 3 -4 -5 -6 7 8 9 -10 -11 -12 13) # if n <- 13 

但是当我这样做时,我不断收到警告信息:

v1 <- function(n) {
    seq(1:n) * c(1,1,1,-1,-1,-1)
}

关于做这件事的正确方法的任何提示?

2 个答案:

答案 0 :(得分:0)

V0(10)是一个长度为10的数组,而c(1,1,1,-1,-1,-1)的长度为6。

你得到的警告(&#34;较长的物体长度不是较短物体长度的倍数&#34;)是因为6不分10。

执行v0(10) * c(1,1,1,-1,-1,-1)时,R会重复第二个数组,以便创建与v0(10)长度相同的数组。 怎么样?像这样:

v0(10) * c(1,1,1,-1,-1,-1,1,1,1,-1)

如果这不是你想要获得的结果,那么要么纠正v0(10),要么修改第二个数组,要么创建一个函数来定义这两个数组之间的正确操作。

答案 1 :(得分:0)

你可以做点什么,

v1 <- function(n){
  t <- seq(1:n)
  t[c(rep(FALSE, 3), rep(TRUE, 3))] <- t[c(rep(FALSE, 3), rep(TRUE, 3))] * (-1)
  return(t)
  }

v1(10)
# [1]   1   2   3  -4  -5  -6   7   8   9 -10

还有一个阅读at this以获取有关警告的更多信息