你能解释一下替换函数是如何计算向量长度的吗?

Can you explain how replace function is calculating vector length?

我正在使用替换函数用列表中的字符替换数字,但似乎需要向索引列表添加一个额外的值才能使代码正常工作。 (参见示例)

by 问题的简单版本是我有一个列表 (0,1),我想用 "a" 替换 0,用 "b" 替换 1。

replace(0:1, 0:1, c("a","b"))

生成以下结果

[1] "a" "1"
Warning message:
In x[list] <- values :
  number of items to replace is not a multiple of replacement length

当将索引列表扩展到 0:2 时,我得到了所需的输出

> replace(0:1, 0:2, c("a","b"))
[1] "a" "b"

我显然不明白替换功能是如何工作的,但我似乎无法弄清楚我错过了什么。

要替换的第二个参数是索引列表(不是值),R 使用基于 1 的索引。 0:1 仅包含 1 个有效索引。因此实际上,

replace(0:1, 0:1, c("a","b"))

相当于

replace(0:1, 1, c("a","b"))

生成警告消息。

看来你真的是在从 plyr 包中寻找 mapvalues 的功能。例如,

x <- c(2,3,5,7,11)
plyr::mapvalues(x,c(3,7),c(10,12))

这导致输出:

[1]  2 10  5 12 11

mapvalues 是一个 plyr 函数的例子,它在较新的包 dplyr 中没有直接模拟。参见 。不建议同时使用这两个包。这就是为什么我使用更明确的 plyr::mapvalues() 而不是首先使用 library(plyr) 然后简单地使用 mapvalues().