【发布时间】:2016-11-25 15:30:58
【问题描述】:
假设我有一个向量
target <- c(19,15,12,21,20,9,15,14)
现在,我想用其他值替换该向量中的所有值,比如说用相应的字母。所以,我知道以前的价值观是什么......
before <- 1:26
而且我知道他们之后的样子......
after <- letters[1:26]
现在,我想将target 中与before 中的值相等的所有值替换为after 中的相应值。我想使用函数(例如应用函数)来做到这一点:
someFancyFunction(target, before, after)
[1] "s" "o" "l" "u" "t" "i" "o" "n"
我最好的主意是使用mapply()
myFun <- function(x,y,z){
x[x==y] <- z
x
}
mapply(myFun, y = before, z = after, MoreArgs = list(x = target))
但这当然会返回一个矩阵,而我希望所有迭代都应用于同一个向量。有人可以帮忙吗?
只是为了确定。我知道如何编辑子集向量,并且知道如何使用循环来完成。我真的很想用一个函数来做。
【问题讨论】:
-
只要使用
after[target] -
你可以 Vectorize() 你的 y 和 z 函数
-
概括@akrun 的解决方案:
after[match(target,before)]. -
为了扩展 akrun 的答案(这个问题肯定是重复的),您正在尝试重新发明“[”函数。可以将他的答案写为
"["(letters, target <- c(19,15,12,21,20,9,15,14) )。 `mapply 不会成功,因为 target 和 after 的长度不一样。 -
也看
chartr