【问题标题】:x and y lengths differ in an applyx 和 y 长度在应用中不同
【发布时间】:2017-06-24 19:33:05
【问题描述】:

所以我试图在一个数组上运行一个应用函数。想法是查看风险因素列中的值,如果为 1,则使用“OnsetFunction”,如果为零,则使用 HighOnsetFunction。然后将生成一列值,该列填充数组中的另一列。

> apply(OutComes, 1, function(x) { if(x["Risk_Factor"] == 1) 
> + {OnsetFunction()} 
> + else{ HighOnsetFunction()}})

我在使用上述应用功能时遇到问题,并不断收到此消息。

>Error in xy.coords(x, y) : 'x' and 'y' lengths differ

目前数组中只有五行,因为我试图确保代码在一个小组中工作,然后再将其扩展到很多人,但我不确定 x 和 y 是什么.我见过这个带有图表的消息,但以前从未见过。

【问题讨论】:

  • 你能展示你的数组吗?
  • PersonNumber Risk_Factor OC_Death OnsetAge Clinical CS_Death Cure AC_Death [1,] 1 1 99.69098 NA NA NA NA NA [2,] 2 1 60.68009 NA NA NA NA NA [3,] 3 0 88.67483 NA NA NA NA NA [4,] 4 0 87.60846 NA NA NA NA NA [5,] 5 0 78.23118 NA NA NA NA NA
  • 尝试根据第二列的值 1 或零更改第四列
  • OnsetFunction 和 HighOnsetFunction 你可以发布它们,因为没有它们就无法模拟任务......怀疑这两个函数不会处理 NA,在这种情况下你会有不同的大小,一种方法是对 NA 进行“编码”或仅用答案填充向量,因为如果您在原始数据帧中使用,则需要: 1. 删除 NA 2. 将所有 NA 编码为 0: 2 1 60.68009 0 0 0 0 0(这是基于您的示例数据)

标签: arrays r if-statement apply


【解决方案1】:

我认为您正在尝试使用ifelse,但使用applyif

试试:

ifelse(OutComes$Risk_Factor==1, OnsetFunction(), HighOnsetFunction())

【讨论】:

  • 同样的问题还在发生。即使单独使用 ifelse,也忽略 apply 函数。 > ifelse(OutComes[,"Risk_Factor"] == 1, HighOnsetFunction(x), OnsetFunction(x)) 这会抛出相同的 x 和 y 长度不同的问题。
  • @Ryan,那么问题可能出在这些函数上。它们可能不会返回相同长度的数组。例如:对于某些 x,一个可能返回一个值,另一个可能返回一个二值数组。检查这两个功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多