转换为自定义功能时出现了代码中断?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转换为自定义功能时出现了代码中断?相关的知识,希望对你有一定的参考价值。

我正在整理一个较大数据框中的汇总表。我注意到我正在重新使用以下代码,但使用不同的%like%字符:

# This code creates a df of values where the row name matches the character
df <- (data[which(data$`col_name` %like% "Total"),])
df <- df[3:ncol(df)]
df[is.na(df)] <- 0

# This creates a row composed of the sum of each column
for (i in seq_along(df)) 
  df[10, i] <- sum(df[i])


# This inserts the resulting values into a separate summary table
summary[1, 2:ncol(summary)] <- df[nrow(df),]

为了保持代码干燥并避免重复,我认为最好将其转换为一个自定义函数,然后可以使用不同的字符串进行调用:

create_row <- function(x) 
  df <- (data[which(data$`Crop year` %like% as.character(x)),])
  df <- df[3:ncol(df)]
  df[is.na(df)] <- 0

  for (i in seq_along(df)) 
    df[10, i] <- sum(df[i])
  


# Then populate the summary table as before with the results
total <- create_row("Total")
summary[1, 2:ncol(summary)] <- total[nrow(total),]

但是尝试运行此代码时,它只会返回一个空变量。

通过反复试验,我发现导致此的代码行是:

df[is.na(df)] <- 0

在此自定义函数之外逐行运行时,代码绝对可以正常工作。

答案

如注释中所述,如果在函数末尾添加return(df),则该函数将起作用。我们需要这样做,因为for循环与其他函数不同,它在执行后不会返回对象。

而且,正如@alan的评论中所提到的,您可以使用colSums获取每一列的总和,而不是使用for循环遍历每一列并获取其sum

以上是关于转换为自定义功能时出现了代码中断?的主要内容,如果未能解决你的问题,请参考以下文章

每个系列的 Pandas groupby 自定义功能

ArcGIS API for JavaScript 4.2学习笔记[16] 弹窗自定义功能按钮及为要素自定义按钮(第五章完结)

扩展XAF模型信息实现自定义功能

游览结束后如何在 jourde 中添加自定义功能?

Excel自定义功能栏图标突然变大,快捷键不能全部显示,应如调整

自定义功能接口SummaryStatistics