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

时间:2019-06-10 01:33:17

标签: r replace dimensions

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

按问题的简单版本是我有一个列表(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"

我显然不了解replace函数的工作原理,但似乎无法弄清丢失的内容。

1 个答案:

答案 0 :(得分:1)

要替换的第二个参数是索引列表(不是值),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软件包中没有直接的模拟。参见this question。不建议同时使用两个软件包。这就是为什么我使用更明确的plyr::mapvalues()而不是首先使用library(plyr)然后使用简单的mapvalues()的原因。