对行操作使用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

我希望将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_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
是一个包含许多函数的包,其中一些函数在行的情况下可能很有用。在这里,输出将重新创建原始集。它将获取每一行,分配每一列,然后将新元素绑定到一起。