【问题标题】:ifelse r - x and y lengths differifelse r - x 和 y 长度不同
【发布时间】:2017-06-27 09:38:49
【问题描述】:

我正在尝试在名为“OutComes”的数组上使用ifelse,但这给我带来了一些麻烦。

>  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

现在我将尝试使用 apply 来分析此表的 Risk_Factor 列并应用两个函数之一来替换 OnsetAge 列的 NA。

我一直在使用 apply 函数 -

apply(OutComes, 1, function(x)ifelse(OutComes[,"Risk_Factor"] == 1, 
                                      HighOnsetFunction(x), OnsetFunction(x))

但是,这显然不起作用,因为 ifelse 本身不起作用。错误是 -

xy.coords(x, y) 中的错误:“x”和“y”长度不同

我不确定这个 ifelse 中发生了什么或 x 和 y 长度是什么。

【问题讨论】:

  • 函数 HighOnsetFunctionOnsetFunction 。可以分享一下吗?
  • 起始函数 >function(x){unlist(approx(probability,age,x,ties=max)[2],use.names=F)} 高起始函数是一样的,只是概率它使用的表更高。
  • 不是作为评论...更好地扩展您的初始请求

标签: r if-statement apply


【解决方案1】:

您的应用功能有误。您正在应用一个带有参数 x 的函数(一行 OutComes),但是在 ifelse 中,您使用了一个向量 OutComes[,"Risk_Factor"] ,它是原始矩阵的一列,而不是单个数字。一个简单的解决方案是做

apply(OutComes, 1, function(x) ifelse(x["Risk_Factor"] == 1, 
                 HighOnsetFunction(x), OnsetFunction(x)))

但是在处理标量时,并没有真正需要使用ifelse,所以写起来可能效率更高

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

【讨论】:

  • 它仍然在 xy.coords(x,y) 中抛出 >error : 'x' 和 'y' 长度不同
  • 您确定这不是您的 [High]OnsetFunction 中的错误吗?如果应用于您的单行数据,它们是否可以正常工作?
  • 我会检查的,但 OnsetFunction 实际上在代码的前面已经使用,没有任何困难。 OC_Death 列是使用该起始函数生成的。
  • 这是否意味着它们不将数据数组的一行作为输入(因为您使用函数来定义某些列),但还有其他内容?这些函数的实际输入是什么?如果它不是单行,也许您甚至不应该尝试在这种情况下使用 apply ?
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多