转换为自定义功能时出现了代码中断?
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
。
以上是关于转换为自定义功能时出现了代码中断?的主要内容,如果未能解决你的问题,请参考以下文章
ArcGIS API for JavaScript 4.2学习笔记[16] 弹窗自定义功能按钮及为要素自定义按钮(第五章完结)