R编写函数的编程帮助

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

我试图编写一个代码,显示一个向量,该向量只显示不能被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 <- 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