我有一个函数,我希望它将其结果添加到数据帧中。但是,这似乎不起作用。如果我尝试以下操作:
testdf <- data.frame(matrix(ncol = 1, nrow = 0))
testfunction <- function() {
testdf[nrow(testdf) + 1,] <- list("a")
}
testfunction()
testdf
[1] matrix.ncol...1..nrow...0.
<0 rows> (or 0-length row.names)
它不会添加行。但是,如果我直接执行testfunction()
中的内容,它会起作用:
testdf[nrow(testdf) + 1,] <- list("a")
testdf
matrix.ncol...1..nrow...0.
1 a
为什么会这样,如何从函数内向数据帧添加一行数据?
也许最好的方法是将数据框作为参数传递给函数,然后将修改后的数据框返回给调用方。
testfunction <- function(df) {
df[nrow(df) + 1,] <- list("a")
return(df)
}
testdf <- data.frame(matrix(ncol = 1, nrow = 0))
testdf <- testfunction(testdf)
testdf
您也可以保持所有内容相同,但使用全局赋值运算符<<-
:
testfunction <- function() {
testdf[nrow(testdf) + 1,] <<- list("a") # generally bad
}
但是这样做有一些潜在的警告,我给出的第一个选项更可取。