我想用散列Map找到一个值,然后用这个值来计算一个新值。通常我努力高效地工作,但我不是很精通R。我知道DPLYR管道的基础知识,所以不想再用for循环了。
下面是一个可以重现的最小例子:
data("mtcars")
m.subset <- mtcars[2:7, 10:11]
letters <- c("a", "b", "c", "d", "e", "f")
m.subset <- cbind(m.subset, letters)
testmap <- hashmap()
testmap[c("a", "b", "c", "d", "e", "f")] <- c(4.0, 5.0, 6.0, 7.0, 8.0, 9.0)
m.subset %>% mutate(score1=query(testmap, letters)*gear) -> m.subset
不幸的是,我得到这个错误:
Error in `mutate()`:
! Problem while computing `score1 = query(testmap, letters) * gear`.
✖ `score1` must be size 6 or 1, not 0.
Run `rlang::last_error()` to see where the error occurred.
需要注意的是,这是可行的:score1=query(testmap, m.subset$letters[1])*m.subset$gear[1]
,这里我显然可以用i替换1,并使用for循环,但我宁愿不这样做,因为dplyr管道非常适合进行列计算。
我还读了一些关于StackOverflow的问题,比如error-in-r-mutate-must-be-size-4-or-1-not-0。
1条答案
按热度按时间klsxnrf11#
假设你使用
r2r
来表示hashmap
和query
,你可以尝试以下方法:使用purrr
中的map2
,你可以遍历letters
和gear
中的每个元素,然后使用你的testmap
来应用函数query
。