将数据附加到R函数中的dataFrame

时间:2016-01-21 08:39:08

标签: r functional-programming dataframe

我正在尝试编写一个向现有dataFrame添加新行的R函数。

这是我的代码(R newbie here):

    qRows <- data.frame( RowQuery = character(0), "BackTest P&L" = character(0), stringsAsFactors=FALSE)
    # add row to dataFrame
    qRows[nrow(qRows) + 1, ] <- c("sp500(vwpc) | abc(30) | qcume",  "12%")

    #define function to add new row to dataFrame
    Q <- function(data, y){
      data[nrow(data) + 1, ] <- c(y,"88")
    }
    # run new function
    Q(qRows, "newQuery")
    #examine output: but no new row added
    qRows

代码运行时没有错误,但没有添加新行。

2 个答案:

答案 0 :(得分:0)

两项变更:

您需要返回功能输出,然后将输出值分配回qrows。

qRows <- data.frame( RowQuery = character(0), "BackTest P&L" = character(0), stringsAsFactors=FALSE)
# add row to dataFrame
qRows[nrow(qRows) + 1, ] <- c("sp500(vwpc) | abc(30) | qcume",  "12%")

#define function to add new row to dataFrame
Q <- function(data, y){
  data[nrow(data) + 1, ] <- c(y,"88")
  return(data)    # <---------------------------------**return data**
}
# run new function
qRows= Q(qRows, "newQuery")  #<---------------------  **assign output to qRows**
qRows

<强>输出

                       RowQuery BackTest.P.L
1 sp500(vwpc) | abc(30) | qcume          12%
2                      newQuery           88

在您的代码中,Q向data添加了一个新行。

请注意,新行已添加到变量data,该变量位于函数Q的本地,而不是qRows

答案 1 :(得分:0)

> #define function to add new row to dataFrame
> Q <- function(data, y){
+     nms <- names(data)
+     dat <- rbind(data, t(c('sp500(vwpc) | abc(30) | qcume','12%')), t(c(y,'88')))
+     names(dat) <- nms
+     return(dat)
+     }
>
> # run new function
> Q(qRows,'newQuery')
                       RowQuery BackTest.P.L
1 sp500(vwpc) | abc(30) | qcume          12%
2                      newQuery           88