我有一个功能:
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)
}
关于做这件事的正确方法的任何提示?
答案 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以获取有关警告的更多信息