r - R函数运行,什么都不执行(显然)
问题描述
我正在尝试使用函数根据向量中的 12 个元素之一将单个字母代码分配给数据源变量。这是向量:
> Grps
[1] "ST" "RW" "LW" "CF" "CM" "CDM" "CAM" "RM" "LM" "CB" "RB" "LB"
这是函数:$PrimPos 为每一行保存 Grps 中的一个值,$PosGrp 是单字母代码(“F”、“M”或“D”)的目标。
AsgnPos <- function(j, b, e, pos)
{for(q in b:e)
{if(CompleteDataset$PrimPos[j] == Grps[q])
{ CompleteDataset$PosGrp[j] <- pos}
}
}
然后我循环遍历数据源(CompleteDataset),对函数运行三个测试以查看要分配的代码。(我意识到一旦我受到打击,我就可以打破常规,但现在它将遍历所有三个测试)。对函数,我传递: j...CompleteDataset 的行号// b...该类别的 Grps 的第一个位置// e...该类别的 Grps 的最后一个位置// pos...应用于 $PosGrp// 的字母代码
for(i in 1:17981) {
if(CompleteDataset$PrimPos[i] == "GK") {
CompleteDataset$PosGrp[i] <- "G"
} else {
AsgnPos(i,1,4, "F")
AsgnPos(i,5,9, "M")
AsgnPos(i,10,12, "D")
}
}
我预计 for 例程将执行 17,981 次,对数据源的每一行执行一次。第一部分工作正常——它将“G”应用于 $PosGrp,用于在 $PrimPos 中具有“GK”的任何行。我希望反过来,该函数将运行以检查当前行的 $PrimPos 是否与 Grps 向量的元素之一匹配。当它这样做时,它应该将字母代码分配给 $PosGrp。
代码执行时没有显式错误,但除了将“G”分配给所有匹配的行之外,它什么也不做。(我将 $PosGrp 字段默认为“Z”,除了那些更改为“G”的字段之外,它们仍然是“Z”。)
我已经尝试过调试,但我对此很陌生,即使我将它作为断点,我似乎也无法让它逐步执行该函数,所以我看不到那里发生了什么。但是我是否遗漏了一些明显的逻辑?
解决方案
这是一个范围问题。尝试对<<-
函数之外的对象进行操作。
AsgnPos <- function(j, b, e, pos) {
for(q in b:e){
if(CompleteDataset$PrimPos[j] == Grps[q]){
CompleteDataset$PosGrp[j] <<- pos
}
}
}
推荐阅读
- git - 如何检测标记提交合并到哪个分支
- javascript - React nodemailer net.isIP 不是一个函数
- zend-framework - 了解zend中的网格布局
- apache-nifi - 如何在 apache nifi 中连接 putHQL
- reactjs - 道具中的反应样式
- r - rollapply 中的“align”参数有什么作用?
- python - Django Crontab:如何停止并行执行
- c# - 在 Xamarin.Forms Web 视图中打开本地 HTML 文件而不是在资产文件夹中
- android - Android 房间迁移更改列数据类型而不会丢失数据
- node.js - 在 webpack 运行时读取 process.env