R编写函数的编程帮助
我试图编写一个代码,显示一个向量,该向量只显示不能被2、3或7整除的元素R编写函数的编程帮助,r,function,division,R,Function,Division,我试图编写一个代码,显示一个向量,该向量只显示不能被2、3或7整除的元素 function2 <- function(x){ k <- length(x) for(i in 1:x){ if(i%%2!=0 | i%%3!=0 | i%%7!=0){ return x[i] } } } 函数2您想要的是“and”操作符&而不是“or”|。此外,不需要循环,您可以利用R的矢量化 foo <- fun
function2 <- function(x){
k <- length(x)
for(i in 1:x){
if(i%%2!=0 | i%%3!=0 | i%%7!=0){
return x[i]
}
}
}
函数2您想要的是“and”操作符&
而不是“or”|
。此外,不需要循环,您可以利用R的矢量化
foo <- function(x) {
x[(x %% 2 != 0) & (x %% 3 != 0) & (x %% 7 != 0)]
}
foo(1:50)
# [1] 1 5 11 13 17 19 23 25 29 31 37 41 43 47
foo表中已经有一个向量化的解决方案,这是更好的选择,但我认为构建一个实际运行的循环的任务也会很有用。您初始化了循环长度值k
,但从未使用它,而是在1:x
上循环。这是第一个基本错误(除了使用“|”
而不是已经指出的“&”
)。另一个错误是没有保存有效结果的累加器,这些结果可以在运行循环后返回。第三个逻辑错误是测试循环索引的值,而不是x
:
function2=function(x){
k=length(x); val <- c()
for(i in 1:k){ # probably should have used seq_along(x), and skip 'k'
if(!( x[i]%%2==0 | x[1]%%3==0 | x[i]%%7==0)){ # could have used `"||"`
val <- c(val,x[i]) }
}
return (val) } # don't need the return(), could just evaluate `val`
x<-(1:100)
function2(1:100)
[1] 1 3 5 9 11 13 15 17 19 23 25 27 29 31 33 37 39 41 43 45 47 51 53 55 57 59
[27] 61 65 67 69 71 73 75 79 81 83 85 87 89 93 95 97 99
function2=函数(x){
k=length(x);val非常感谢!但是问题写了2,3或7。当我使用它时,它仍然会给我foo(1:100)一组值frm 1:100 T。如果你想要不可被2、3或7整除的数字,那么你应该使用&
它将是“不可被2整除,不可被3整除,也不可被7整除”我现在明白了!这与德摩根定律有关!!非常感谢Richard先生!谢谢你!!!注意返回x[i]
中还有一个错误。没有括号。现在他有了你的正确示例和我的“Fortran”-代码,但至少我添加了一个互补的逻辑测试。我看到复选标记和向上投票的组合让你的答案浮动到它所属的顶部。非常感谢!没有你们的帮助,我将无法解决我的问题!我真的很感激!(:请注意,前面代码中已删除了起始行字符。否则,这样做的负担将无法帮助您。您能否清理代码(从起始行删除
和+
)?
x <- 1:50
x[(x %% 2 != 0) & (x %% 3 != 0) & (x %% 7 != 0)]
# [1] 1 5 11 13 17 19 23 25 29 31 37 41 43 47
function2=function(x){
k=length(x); val <- c()
for(i in 1:k){ # probably should have used seq_along(x), and skip 'k'
if(!( x[i]%%2==0 | x[1]%%3==0 | x[i]%%7==0)){ # could have used `"||"`
val <- c(val,x[i]) }
}
return (val) } # don't need the return(), could just evaluate `val`
x<-(1:100)
function2(1:100)
[1] 1 3 5 9 11 13 15 17 19 23 25 27 29 31 33 37 39 41 43 45 47 51 53 55 57 59
[27] 61 65 67 69 71 73 75 79 81 83 85 87 89 93 95 97 99