【问题标题】:Issue with function not returning a vector函数不返回向量的问题
【发布时间】:2013-02-16 11:09:57
【问题描述】:

当谈到“R”时,我是一个新手,但我已经阅读了很多信息,但我仍然不明白为什么我不能打印我在函数 fn 中返回的向量 -我只是得到值“NULL”。此函数的目标是从两个数组中获取值,将它们相加并将它们放入一个新数组中。我使用 print(test) 命令检查数组中的数字是否正确地添加在一起。也许我附加错误?我现在没有发现问题。

fn <- function(x,y) {
liste <- vector(mode = "numeric", length = 192)
k <- 0  
for (i in 1:(length(x))) {
    for (j in 1:(length(y))) {
        test<-x[i] + y[j]
        print(test)
        append(liste,test, after=k)
        k <- k +1
    }
}
return(liste)
}

event1 = c(0.0,5.0,10.0,12.0)
event2 = c(0.0,3.0,5.0,7.0)
event3 = c(6.0,8.0,10.0,10.0,12.0,13.0,13.0,14.0,16.0,17.0,17.0,20.0)

z <-fn(event2,event3)
names(z)

【问题讨论】:

    标签: r vector append return


    【解决方案1】:

    首先,z 是一个向量(完全是0s),它只是一个未命名的向量。这就是names(z) 返回NULL 的原因。

    其次,在你的方法中,这一行:

    append(liste,test, after=k)
    

    应该是:

    liste[k] = test
    

    这是因为append 不会改变它传递的向量,它只是返回一个新的。

    然而,使用expand.grid 函数,有一个更简单的方法来做你想做的事:

    fn <- function(x, y) {
        rowSums(expand.grid(x, y))
    }
    

    【讨论】:

    • (+1) 最后一行是实际答案。我就是这么写的。
    • 感谢您的回答。但是,如果我不能做 z
    • @John:这确实将返回值分配给变量。尝试打印z (not names(z))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多