对行操作使用purrr
我希望将purrr用于行操作,其中每个元素在函数中作为字符串使用。我得到的错误是它不能将$属性化为原子向量。下面是一个例子:对行操作使用purrr,r,dplyr,purrr,R,Dplyr,Purrr,我希望将purrr用于行操作,其中每个元素在函数中作为字符串使用。我得到的错误是它不能将$属性化为原子向量。下面是一个例子: test_function = function(dat_) { petal_width = dat_$Petal.Width sepal_width = dat_$Sepal.Width petal_length = dat_$Petal.Length sepal_length = dat_$Sepal.Length list(petal
test_function = function(dat_) {
petal_width = dat_$Petal.Width
sepal_width = dat_$Sepal.Width
petal_length = dat_$Petal.Length
sepal_length = dat_$Sepal.Length
list(petal_length,sepal_length,sepal_width,petal_width) %>%
bind_cols -> test
return(test)
}
apply(iris, 1, test_function)
不确定预期输出是什么,但可以使用
pmap
执行行操作。但是,pmap
将每一行作为向量传递,而不是作为数据帧传递,因此$
将不起作用。您可以将功能更改为:
library(tidyverse)
test_function = function(dat_) {
petal_width = dat_[['Petal.Width']]
sepal_width = dat_[['Sepal.Width']]
petal_length = dat_[['Petal.Length']]
sepal_length = dat_[['Sepal.Length']]
tibble(a = petal_length,b = sepal_length,
c = sepal_width,d = petal_width) -> test
return(test)
}
您可以将pmap
用作:
iris %>% mutate(data = pmap(select(., matches('Sepal|Petal')),
~test_function(c(...)))) -> tmp
每一行数据都是一个包含该行数据的TIBLE
tmp$data[[1]]
# A tibble: 1 x 4
a b c d
<dbl> <dbl> <dbl> <dbl>
1 1.4 5.1 3.5 0.2
tmp$data[[1]]
#一个tibble:1 x 4
a、b、c、d
1 1.4 5.1 3.5 0.2
您在哪里使用purr
?这里的所有内容似乎都是dplyr
和base R(顺便说一句:apply(iris,1,…)
正在将所有列转换为字符
,可能不是您想要的/需要的)。我希望用purr执行此操作。我不知道从哪里开始。不清楚您期望的输出是什么。而purrr
是一个包含许多函数的包,其中一些函数在行的情况下可能很有用。在这里,输出将重新创建原始集。它将获取每一行,分配每一列,然后将新元素绑定到一起。