我正在尝试将一些基于循环的循环代码转换为使用R的apply函数。根据该项目的规格,不允许使用其他库(例如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']...)
})
有人可以帮忙吗?如何更改此循环以使用应用函数?
答案 0 :(得分: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
和Temp
在与Type
一起传递给您的匿名函数时都会被强制转换为字符。
编辑:但是使用@Justin建议的switch()
而不是嵌套的if
s会更加优雅。