我不明白为什么这段代码不工作。我觉得我错过了一个非常简单的概念。
#if(!require(tidyverse)) install.packages("tidyverse")
df <- tibble(rule = c("add", "add", "add", "sub"), var1 = c(1, 2, 3, 4), var2 = c(2, 3, 4, 5), result = 0)
simple_as_hello_world <- function(rule, var1, var2) {
if (rule == "add") {result = var1 + var2}
else {result = var1 - var2}
}
map(.x = df, .f = simple_as_hello_world)
3条答案
按热度按时间w3nuxt5m1#
dplyr
包有一个解决方案,但是将列 * var1 * 和 * var2 * 设置为数值,而不是字符。只需删除引号,或者使用as.numeric()
函数。ldioqlga2#
如上所述,
map
适用于列表或向量。另外,您的函数有三个参数,因此pmap
最好传递这些参数。您可以将df
设置为要Map的列表(在这两种情况下,其工作原理与传递tibble - list输出相同,只传递结果):或者在
mutate
中使用将相关元素传递给函数:zfycwa2u3#
map针对向量工作,而pmap(parallel map)迭代多个向量(在本例中为 Dataframe 的列)并针对x[1]、y[1]、z[1]运行函数;然后是x[2]、y[2]、z[2]等。
同样,你的“var 1”和“var 2”不是数字,它们是字符串。在尝试添加它们之前转换为数字。