当我尝试使用myfunction1
来计算final1
的值时,我收到错误(底部)和错误的值。但是,我可以使用myfunction2
来正确计算final1
的值。我想确定final1
的值而不必计算temp1
和temp2
,因为'final1'
是通过更复杂的方程确定的,可能会降低性能。这是可能的,如果是这样,我将如何执行此操作?谢谢!
# code resulting in error of column_2 calculation
myfunction1 = function(x) {
if(x <= 0){
final1 = 500
} else {
final1 = 250
}
return(final1)
}
column_1 = c(-3.5, -2.5, -1.5, 0.5, 1.5, 2.5, 3.5)
df_1 = data.frame(column_1)
df_1$column_2 = myfunction1(df_1$column_1)
# working code
myfunction2 = function(x) {
temp1 = 500
temp2 = 250
final1 = ifelse(x <=0, temp1, temp2)
return(final1)
}
column_A = c(-3.5, -2.5, -1.5, 0.5, 1.5, 2.5, 3.5)
df_A = data.frame(column_A)
df_A$column_B = myfunction2(df_A$column_A)
以下是警告信息:
Warning message:
In if (x <= 0) { :
the condition has length > 1 and only the first element will be used
答案 0 :(得分:2)
如果您只想计算被替换的行的替换值,那么我认为分配到子集是要采用的方式......正如@thelatemail在第一条评论中所建议的那样。它可能看起来像这样:
myfunction3 = function(x) {
y = numeric(length(x))
y[x <= 0] <- 500
y[x > 0] <- 250
return(y)
}
我认为你过分简化了你的例子,让我们说你希望结果是每个mean
组的x
。这应该给出一个更好的意义,因为我们实际上正在进行计算,但只是为必要的组进行评估。
myfunction4 = function(x) {
y = numeric(length(x))
y[x <= 0] = mean(x[x <= 0])
y[x > 0] = mean(x[x > 0])
}
如@ 42所示,我还建议您阅读Difference between if() and ifelse()以更好地了解这些功能何时合适。