我有一个矢量'参与者'在R。
> participant
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
我正在使用功能'修改'更改此向量的内容。
modify <- function(x){
for (i in participant){
if (x[i] > 12)
(x[i]=x[i]-12)
print (x[i])
}}
当我将该函数作为修改(参与者)运行时,它运行正常,但向量参与者的元素保持不变。
有任何建议,我在哪里出错?
答案 0 :(得分:5)
不要使用循环。
participant <- participant - (participant > 12) * 12
如果你坚持使用你的函数,循环索引,让你的函数返回修改后的向量并分配它:
modify <- function(x){
for (i in seq_along(participant)){
if (x[i] > 12) x[i]=x[i]-12
}
return(x)
}
participant <- modify(participant)
当然,循环更难写,也更慢。
答案 1 :(得分:1)
你的问题是函数返回。使用此解决方案,因此函数返回修改后的向量x
:
modify <- function(x){
for (i in participant){
if (x[i] > 12)
(x[i] = x[i] - 12)
print (x[i])}
return(x)
}
participant <- modify(participant)
另一种解决方案是ifelse
功能:
participant <- ifelse(participant > 12, participant - 12, participant)