library(tidyverse)
tib <- tibble(x = c(1,2), y = c(2,4), z = c(3,6))
tib %>% pmap(c)
#[[1]]
#x y z
#1 2 3
#
#[[2]]
#x y z
#2 4 6
をしかし、私は関数を定義する場合
my_c_1 <- function(u, v, w) c(u, v, w)
私はエラーを取得する:
tib %>% pmap(my_c_1)
#Error in .f(x = .l[[c(1L, i)]], y = .l[[c(2L, i)]], z = .l[[c(3L, i)]], :
# unused arguments (x = .l[[c(1, i)]], y = .l[[c(2, i)]], z = .l[[c(3, i)]])
同様に、基底関数を持つ名前付きリストの場合、すべて正常に機能します。
lili_1 <- list(x = list(1,2), y = list(2,4), z = list(3,6))
pmap(lili_1, c)
#[[1]]
#x y z
#1 2 3
#
#[[2]]
#x y z
#2 4 6
とユーザ定義関数と私は同じエラーを取得:
pmap(lili_1, my_c_1)
#Error in .f(x = .l[[c(1L, i)]], y = .l[[c(2L, i)]], z = .l[[c(3L, i)]], :
#unused arguments (x = .l[[c(1, i)]], y = .l[[c(2, i)]], z = .l[[c(3, i)]])
ただし、ユーザー定義関数と非命名リストについては、それが動作:
lili_2 <- list(list(1,2), list(2,4), list(3,6))
pmap(lili_2, my_c_1)
#[[1]]
#[1] 1 2 3
#
#[[2]]
#[1] 2 4 6
名前付きリストとユーザー定義関数で何が壊れているのかよくわかりません。どんな洞察?
ところで、私が定義することで、一時的な回避策が見つかりました:
my_c_2 <- function(...) c(...)
をその後、すべては私にさらに困惑出る...でも、名前のリストで、うまく動作します。
これは最小の再現可能な例を念頭に置いています。私の現在の作業コードでは、変数に...
の回避策を使用せずに、より一般的な定義された関数を使ってtibblesをpmapにパイプすることができます。
私はRバージョン3.4.1をpurrr_0.2.3で使用しています(macOS Sierra 10.12.6)。 – Habert