Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pmap purrr错误:参数1必须有名称_R_Purrr_Pmap - Fatal编程技术网

pmap purrr错误:参数1必须有名称

pmap purrr错误:参数1必须有名称,r,purrr,pmap,R,Purrr,Pmap,我计划对data.table行进行求和,并向其中添加一个常量。这个代码有什么问题。我特别寻找pmap_dfr解决方案: library(data.table) library(tidyverse) temp.dt <- data.table(a = 1:3, b = 1:3, c = 1:3) d <- 10 temp.dt %>% pmap_dfr(., sum, d) # add columns a b and c and add variable d to it 一

我计划对data.table行进行求和,并向其中添加一个常量。这个代码有什么问题。我特别寻找pmap_dfr解决方案:

library(data.table)
library(tidyverse)
temp.dt <- data.table(a = 1:3, b = 1:3, c = 1:3)
d <- 10
temp.dt %>% pmap_dfr(., sum, d)   # add columns a b and c and add variable d to it

一个
pmap\u dfr
解决方案是首先
t
传输数据集。我们以后可以根据需要重命名这些列:

temp.dt %>% 
 t() %>% 
   as.data.frame()-> tmp_dt
   pmap_dfr(list(tmp_dt, 10),sum)
# A tibble: 1 x 3
     V1    V2    V3
  <dbl> <dbl> <dbl>
1    13    16    19
或使用
pmap\u dbl

temp.dt %>% 
   pmap_dbl(.,sum) + d
[1] 13 16 19

常规数据帧也会出现问题,因此要将其简化为基本内容,请启动新的R会话,去掉data.table部分,并在有3x4 data.frame的地方使用所示的输入,以免混淆行和列。还要注意,
pmap\u-dfr(sum,d)
pmap(sum,d)%%>%bind\u行
相同,问题发生在
bind\u行
步骤中

library(dplyr)
library(purrr)

# test input
temp.df <- data.frame(a = 1:3, b = 1:3, c = 1:3, z = 1:3)
rownames(temp.df) <- LETTERS[1:3]
d <- 10

out <- temp.df %>% pmap(sum, d)     # this works
out %>% bind_rows
## Error: Argument 1 must have names
或者可以这样编写,以避免写入
temp.df
两次:

temp.df %>% { set_names(pmap(., sum, d), rownames(.)) } %>% bind_rows
我认为我们可以得出这样的结论,即
pmap\u dfr
不适合在这里使用

基尔 当然,在base R中,这些都是微不足道的,因为您可以这样做:

rowSums(temp.df) + d
##  A  B  C 
## 14 18 22 
或者更一般地说:

as.data.frame.list(apply(temp.df, 1, sum, d))
##  A  B  C 
## 14 18 22 

数据表 在data.table中,我们可以写:

library(data.table)

DT <- as.data.table(temp.df)

DT[, as.list(rowSums(.SD) + d)]
##    V1 V2 V3
## 1: 14 18 22

DT[, as.list(apply(.SD, 1, sum, d))]
##    V1 V2 V3
## 1: 14 18 22
库(data.table)

DT我正试图学习使用pmap。你知道如何使用pmap_dfr吗?我添加了一个
pmap
备选方案。不过,使用
map2
imap
可能会更好。对不起,我正在寻找pmap\u-dfr。我已经能够让它与pmap和pmap_dbl一起工作,但在使用pmap_dfr时失败。此外,我提供的示例是一个玩具示例。我希望d变量作为sum函数的输入参数,而不是稍后将d添加到行求和中。请检查编辑。您可以根据需要重命名结果。谢谢!解释得很好。
rowSums(temp.df) + d
##  A  B  C 
## 14 18 22 
as.data.frame.list(apply(temp.df, 1, sum, d))
##  A  B  C 
## 14 18 22 
as.data.frame.list(Reduce("+", temp.df) + d)
##   X14 X18 X22
##1  14  18  22
library(data.table)

DT <- as.data.table(temp.df)

DT[, as.list(rowSums(.SD) + d)]
##    V1 V2 V3
## 1: 14 18 22

DT[, as.list(apply(.SD, 1, sum, d))]
##    V1 V2 V3
## 1: 14 18 22