我有一个函数,该函数返回具有50列(一行)以上的数据帧。 该函数在循环内调用(不适用于),因此我得到了一个数据帧列表,每个数据帧一行。
我在函数的最开始处初始化了一个空的数据框,以该过程返回的实际数据填充(此处为测试的简短版本)
df <- read.csv(text = "conn,pc,server,profile")
R> df
[1] conn pc server profile car id amount
<0 rows> (or 0-length row.names)
考虑到该过程有时不会为所有列返回值,我想为行分配值。
类似的SO问题倾向于以这种方式依赖于初始化数据帧:
df <- data.frame("conn"= NA, "pc"= NA, "server"= NA, "profile" = NA)
但是我不希望出现任何NA,以防万一没有返回值。
所以在我的函数中,我先尝试了:
returned.conn.value <- 3 # assigned by hand for the sake of simplicity
df$conn <- returned.conn.value
Error in `$<-.data.frame`(`*tmp*`, conn, value = 3) :
replacement has 1 row, data has 0
所以我发现无法为空数据框内的列添加值,但是.....
df[1,1] <- 3
这使我惊讶。但是,我认为按索引将值分配给列非常难看,所以我尝试了以下方法:
grep("^conn$", colnames(df))
[1] 1
确实是Uglier,因为它迫使我为每一列写相同的行(而不是手动计数,是的)
所以,恐怕我走了一条通往无路可走的死路。
有什么方法可以初始化一个空的数据帧,因为它可以让我像下面那样进行简单的分配而没有问题?
df$conn <- 3
任何提示将不胜感激。