R中的for循环迭代问题

时间:2015-02-17 04:48:27

标签: for-loop

我试图更熟悉函数编写并遇到一个问题,我现在一直试图解决3个小时。这是代码:

test <- function (x) {
    for (i in x)
            print(x[i])
}

当我指定一些变量时:

a <- c(0,1)
b <- c(1,2)

b工作正常,但'a'搞砸了所有:

> test(b)
[1] 1
[1] 2

> test(a)
numeric(0)
[1] 0

我认为R处理'a'中的1和0的方式有问题。但是当我在命令行迭代函数时,没有问题。

print(a[1])
[1] 0
> print(a[2])
[1] 1

R如何在函数及其外部对命令进行不同的处理?为什么1和2可以为'x',但不是0和1?

2 个答案:

答案 0 :(得分:2)

在你的功能中,

test <- function (x) {
    for (i in x)
            print(x[i]) ## you are print from the indexed value
}

因此在test(a)

你正在打印:

print(a[1]) # gives the first item in the vector a
print(a[2]) # gives the second item in the vector a
test(b)

中的

print(b[0]) # gives Null, since R is 1-based
print(b[1]) # gives the first item in the vector b

因此你得到了结果

如果要通过矢量中的所有项目进行打印,可以将功能更改为

test <- function (x) {
    for (i in 1:length(x))
            print(x[i]) ## you are print from the indexed value
}

干杯, Biobirdman

答案 1 :(得分:1)

for循环的语法将迭代x而不是x索引。当您致电test(c(0,1))时,在for循环i的第一次迭代中,其值为0.这意味着您将尝试print第0个元素这个论点。对于数字向量,在R中,这将始终给出numeric(0),一个长度为0的数字变量的R项。对R有更好,更系统的知识的人必须解释为什么这是一件好事,但是在任何情况下,它都不是我认为你想要的。

a <- c(0,1)
b <- c(1,2)

> a[0]
numeric(0)

> b[0]
numeric(0)

我认为您希望您的功能类似于

test2 <- function (x) {
     for (i in 1:length(x))
             print(x[i])
 }

现在,我们可以将您的函数testtest2进行比较,并提供更多信息。

> test(c(101,202))
[1] NA
[1] NA
> test2(c(101,202))
[1] 101
[1] 202

或者我在原始问题中错过了你所追求的内容?