我有一个返回数据帧的tryCatch块。在某些情况下,它返回一个包含0行的空数据帧。无论它是否空,我都需要在那里添加一些数据。 (一些列有一行)。我发现当它返回一个空的数据帧时,向数据帧添加列总是给我错误。例如:
dt <- data.frame()
for (a in 0:2) {
table <- tryCatch(
{ mtcars %>%
filter(am==a) %>%
group_by(vs) %>%
summarise(n=n()) %>%
spread(vs, n)
},
error = function(e) {
return(NULL)
} )
table$am = a
dt <- bind_rows(dt, table)
}
以下是错误消息:
Error in `$<-.data.frame`(`*tmp*`, "am", value = 2L) : replacement has 1 row, data has 0
任何人都可以帮忙解决这个问题吗?非常感谢。
答案 0 :(得分:1)
一种选择可能是使用有效列但data.frame
行声明您的0
。这为add row
使用nrow(data)+1
和指定所需列的值提供了灵活性。
data = data.frame(ID = integer(), Result = integer())
data[nrow(data)+1,] = c(1, 5)
data
# ID Result
# 1 1 5
修改强>
OP遇到tryCatch
阻止问题。在这种情况下,似乎存在从tryCatch
块抛出异常并且table
的值被指定为NULL
的条件。
可能的解决方法是替换
table$am = a
dt <- bind_rows(dt, table)
行
if(!is.null(table)){
table$am = a
dt <- bind_rows(dt, table)
}else{
dt[nrow(dt)+1, "am"] <- a
}
答案 1 :(得分:0)
data<-data.frame(rbind(data, ID=1))
答案 2 :(得分:0)
您无法像这样向空数据框添加条目。尝试 {{1}}