【发布时间】:2021-09-25 16:21:30
【问题描述】:
我正在尝试编写一个函数来计算列表中每个新值的惊喜。这是一个虚拟示例:
x <- c('A','A','C','D','A','A','D','A','B','A','A')
surprise <- function(x){
sur <-c()
for (i in x){
num <- sum(x[1:i] == x[i])
denom <- length(x[1:i])
sur[i] <- -log2((num)/(denom-1+4))
}}
我的 for 循环产生了这个错误,即使我手动为 i 插入值,一切似乎都正常:
1:i 中的错误:NA/NaN 参数 另外:警告信息: 在 1:i 中:强制引入的 NAs
我也知道可能有一种方法可以在没有 for 循环的情况下编写这个 - 欢迎任何建议!
【问题讨论】:
-
试试
for (i in seq_along(x))。否则,您将遍历x的元素,这些元素是字符。另外添加return(sur)或简单地sur作为函数的最后一行以返回计算值。 -
非常感谢! (仅供未来读者参考:length(x) 在这里不起作用(我尝试过的另一个修复方法),但 seq_along(x) 可以)