更新sapply函数中的data.frame

时间:2016-03-18 03:00:38

标签: r dataframe sapply

可能是一个简单的问题。

我正在运行sapply函数,除了函数执行的其他操作之外,我还要更新data.frame

我认为这个示例代码可行:

df <- NULL
res <- sapply(1:10, function(i){
  if(is.null(df)){
    df <- data.frame(itr=i,let = letters[i])
  } else{
    tmp.df <- data.frame(itr=i,let = letters[i])
    df <- rbind(df,tmp.df)
  }
  return(i)
})

实际上,我返回的内容比索引i更精细。这只是一个简化的例子。

但运行df后,sapply仍为NULL。

如何更新df

1 个答案:

答案 0 :(得分:2)

正在分配的函数中定义的df与函数外部定义的df不同df。如果您将df <-的两个匹配项替换为df <<-,那么它将起作用。

虽然效率低下(因为连续附加到R中的对象效率低下),但您可以在这样的循环中连续追加行:

df <- NULL 
for(i in 1:10) df <- rbind(df, data.frame(itr = i, let = letters[i]))

最好是创建一个行列表,然后立即rbind

do.call("rbind", lapply(1:10, function(i) data.frame(itr = i, let = letters[i])))