3

我正在尝试将一些现有的基于循环的代码转换为使用 R 的应用函数。根据该项目的规范,不允许使用其他库(例如 plyr)。

这就是它目前的工作方式。

  Type Pressure Temp
1   Iron      100   10
2 Copper      200   20
for(i in 1:rnow(data))
{
    if(data$Type[i] == "Iron")
         Output[i] <- IronCalculation(data$Pressure[i]...)
    else if(data$Type[i] == "Copper")
         Output[i] <- CopperCalculation(data$Pressure[i]...)
}

我想将其转换为使用该apply()功能。我尝试了多种方法,但我只是卡住了,因为apply()将所有变量值转换为字符,因此不可能对这些进行数字编译。原始数据集有 150 多个变量,其中许多是字符串/字符。

作为测试,我尝试了以下方法。显然它失败了。我可以使用 as.numeric() 将字符变量转换为数字,但每行有 8000 多行和 20 个变量。似乎浪费了 CPU 周期。

apply(data[1,], 2, function(x) {
if(x['Type'] == "Iron")
             Output <- IronCalculation(x['Type'],x['Pressure']...)
})

有人可以帮忙吗?如何更改此循环以使用应用功能?

4

1 回答 1

0

尝试

apply(data, 1,  
  function(x) {  
    if (x['Type'] == 'Iron')  
      IronCalculation(as.numeric(x['Pressure']), as.numeric(x['Pressure']))  
    else if (x['Type'] == 'Copper')  
      CopperCalculation(as.numeric(x['Pressure']), as.numeric(x['Pressure']))  
  }  
)  

你会得到一个向量。 as.numeric()是必要的,因为两者在传递给您的匿名函数Pressure时都会被强制转换为字符。TempType

编辑:但是switch()按照@Justin 的建议使用而不是嵌套if的 s 会更加优雅。

于 2016-02-02T02:28:58.320 回答