如何基于向量长度向data.frame添加列

如何基于向量长度向data.frame添加列,r,for-loop,vector,dataframe,R,For Loop,Vector,Dataframe,我有一个函数runBootstrap,它的输出结果是一个可变长度的向量(取决于cat的值,它本身是测试的产物)。抱歉,这不是“最低限度” 这显然不起作用,除非结果向量是length=1。但是直到函数运行之前,我不知道向量的长度(尽管一旦它运行,每次迭代的长度都是相同的) 我希望达到以下目标: 示例1:如果长度(结果)==2 示例2:如果长度(结果)==3 谢谢你的建议和指导 为澄清而编辑 更新-使用解决方案编辑 我通过创建一个空白列表,填充,然后使用rbind实现了我想要的功能,如下所示:

我有一个函数
runBootstrap
,它的输出
结果
是一个可变长度的向量(取决于
cat
的值,它本身是
测试的产物)。抱歉,这不是“最低限度”

这显然不起作用,除非结果向量是length=1。但是直到函数运行之前,我不知道向量的长度(尽管一旦它运行,每次迭代的长度都是相同的)

我希望达到以下目标:

示例1:如果长度(结果)==2

示例2:如果长度(结果)==3

谢谢你的建议和指导

  • 为澄清而编辑
  • 更新-使用解决方案编辑
我通过创建一个空白列表,填充,然后使用
rbind
实现了我想要的功能,如下所示:

df1$result <- NA
for (i in 1:nrow(df1)) {
  df1$result[i] <- runBootstrap(arg1.freqs, arg2.freqs)
}
appendResults <- function(df1, arg1, arg2) {
  my.list <- vector("list", nrow(df1))
  for (i in 1:nrow(df1)) {    
    arg1.freqs <- as.numeric(arg1[i, 3:6])
    arg2.freqs <- as.numeric(arg2[i, 3:4])
    my.list[[i]] <- runBootstrap(arg1.freqs, arg2.freqs) 
  }
  result.df <- do.call(rbind, my.list)
  df2 <- do.call(cbind, list(df1, result.df))
}

appendResults检查这一项,不确定结果是什么,但这会创建空列,等于结果的长度,NAs:

# fake data frame
df1 <- data.frame(x = c(1,2,3), y = c("a", "b", "c"))

# say result has length 3
res <- c(5,6,7)

# make columns with names x1, ..., x + length of res
# and assign NA values to those column
df1[ , paste("x", 1:length(res), sep = "")] <- NA
#假数据帧

df1调用函数
函数
会混淆读卡器和颜色突出显示系统。提供一个与
函数类似的函数示例(返回不同的长度,正如您试图描述的那样),将有助于读者更快地理解您的问题并找到有效的解决方案。见“谢谢@zeehio”,将更新以澄清。谢谢@din。我想这会管用的。只需要玩弄一下位置(并学习编写更干净的代码!)@zeehio-再次感谢。我对它进行了一些修补,并在上面进行了编辑。
  df1.col x1 x2 x3
1       1  1  1  1
2       2  2  2  2
3       3  3  3  3
4       4  4  4  4
5       5  5  5  5
6       6  6  6  6
appendResults <- function(df1, arg1, arg2) {
  my.list <- vector("list", nrow(df1))
  for (i in 1:nrow(df1)) {    
    arg1.freqs <- as.numeric(arg1[i, 3:6])
    arg2.freqs <- as.numeric(arg2[i, 3:4])
    my.list[[i]] <- runBootstrap(arg1.freqs, arg2.freqs) 
  }
  result.df <- do.call(rbind, my.list)
  df2 <- do.call(cbind, list(df1, result.df))
}
# fake data frame
df1 <- data.frame(x = c(1,2,3), y = c("a", "b", "c"))

# say result has length 3
res <- c(5,6,7)

# make columns with names x1, ..., x + length of res
# and assign NA values to those column
df1[ , paste("x", 1:length(res), sep = "")] <- NA