在 lapply 可选参数中两次使用 .data 代词
Using .data pronoun twice in lapply optional arguments
我想使用 lapply 函数将列表项传递给 FUN 中的两个参数。
例如,假设:
> lapply(state.abb, paste, c(.data, 2))
[[1]]
[1] "AL 2"
[[2]]
[1] "AK 2"
在这里,我可以将列表参数 .data
和 2 传递给 paste
函数。但是在我的应用程序中,我想将 .data
传递给两个 paste
参数。在我的想象中,这将是代码和输出:
>lapply(state.abb, paste, c(.data, .data))
[[1]]
[1] "AL AL"
[[2]]
[1] "AK AK"
但我得到的却是
> lapply(state.abb, paste, c(.data, .data))
[[1]]
[1] "AL "
[[2]]
[1] "AK "
我 可以 在这种情况下再次提供 state.abb ,但在我的实际用例中,这是一个更大的数据集的一部分,我试图避免尽可能命名对象。
非常感谢帮助!
您可以使用匿名函数:
lapply(state.abb, function(x) paste(x, x))
OR paste
然后将其设为列表。
as.list(paste(state.abb, state.abb))
.data
代词是一个 tidyverse (dplyr/ggplot2) 的东西。它不适用于 lapply
等基本函数。 (事实上 ,如果您 运行 没有加载 dplyr
或 ggplot2
的代码,您应该会收到“找不到对象”错误。如果有任何其他函数使用它,.data
基本上定义为一个空列表,因此它不会为您做任何事情。所以这些都是完全一样的
lapply(state.abb, paste, c(.data, 2))
lapply(state.abb, paste, c(list(), 2))
lapply(state.abb, paste, list(2))
如果你想在 lapply
中多次使用相同的参数,那么你需要编写自己的函数
lapply(state.abb, function(x) paste(x, x))
或者您可以使用 purrr::map
函数,并使用 .x
为数据使用函数的公式语法
purrr::map(state.abb, ~paste(.x, .x))
不一定比上面的解决方案更好,但另一个:
Map(function(state.abb, i) paste(i, state.abb), state.abb, state.abb)
我想使用 lapply 函数将列表项传递给 FUN 中的两个参数。
例如,假设:
> lapply(state.abb, paste, c(.data, 2))
[[1]]
[1] "AL 2"
[[2]]
[1] "AK 2"
在这里,我可以将列表参数 .data
和 2 传递给 paste
函数。但是在我的应用程序中,我想将 .data
传递给两个 paste
参数。在我的想象中,这将是代码和输出:
>lapply(state.abb, paste, c(.data, .data))
[[1]]
[1] "AL AL"
[[2]]
[1] "AK AK"
但我得到的却是
> lapply(state.abb, paste, c(.data, .data))
[[1]]
[1] "AL "
[[2]]
[1] "AK "
我 可以 在这种情况下再次提供 state.abb ,但在我的实际用例中,这是一个更大的数据集的一部分,我试图避免尽可能命名对象。
非常感谢帮助!
您可以使用匿名函数:
lapply(state.abb, function(x) paste(x, x))
OR paste
然后将其设为列表。
as.list(paste(state.abb, state.abb))
.data
代词是一个 tidyverse (dplyr/ggplot2) 的东西。它不适用于 lapply
等基本函数。 (事实上 ,如果您 运行 没有加载 dplyr
或 ggplot2
的代码,您应该会收到“找不到对象”错误。如果有任何其他函数使用它,.data
基本上定义为一个空列表,因此它不会为您做任何事情。所以这些都是完全一样的
lapply(state.abb, paste, c(.data, 2))
lapply(state.abb, paste, c(list(), 2))
lapply(state.abb, paste, list(2))
如果你想在 lapply
中多次使用相同的参数,那么你需要编写自己的函数
lapply(state.abb, function(x) paste(x, x))
或者您可以使用 purrr::map
函数,并使用 .x
为数据使用函数的公式语法
purrr::map(state.abb, ~paste(.x, .x))
不一定比上面的解决方案更好,但另一个:
Map(function(state.abb, i) paste(i, state.abb), state.abb, state.abb)