mcmapply,访问 data.frame 中的值并将它们传递给函数

时间:2021-03-08 20:38:24

标签: r dataframe tidyverse tidyr

我使用 parallell 包和函数 mcmapply

我有以下数据结构:

pfad <- structure(list(from.id = c(7018492265, 7535901036, 3332568326
    ), from.lon = c(11.8303853, 12.1840786, 12.014866), from.lat = c(48.1102703, 
    48.1140645, 47.8172942), to.id = c(7535901036, 3332568326, 130221481
    ), to.lon = c(12.1840786, 12.014866, 12.2078502), to.lat = c(48.1140645, 
    47.8172942, 47.8395169)), class = "data.frame", row.names = c(NA, 
    3L))


from.id                from.lon                from.lat      to.id                  to.lon                  to.lat
1 7018492265 11.83038529999999965980 48.11027030000000337395 7535901036 12.18407859999999942602 48.11406449999999779266
2 7535901036 12.18407859999999942602 48.11406449999999779266 3332568326 12.01486599999999960176 47.81729419999999919355
3 3332568326 12.01486599999999960176 47.81729419999999919355  130221481 12.20785019999999931883 47.83951689999999956626

我想将单个值传递给函数。 例如,我想从每一行数据中打印出 from.id 。 我试过这样的事情:

  mcmapply(function(x) print(x[[1]]),pfad,mc.cores = n.cores)

但我得到以下输出:

     from.id                    from.lon                    from.lat                       to.id 
7.018492265000000000000e+09 1.183038529999999965980e+01 4.811027030000000337395e+01 7.535901036000000000000e+09 
                     to.lon                      to.lat 
1.218407859999999942602e+01 4.811406449999999779266e+01 

如何访问单个值?

1 个答案:

答案 0 :(得分:1)

如果你想遍历每一行,那么你可以这样做:

parallel::mcmapply(
  FUN = function(x) {
    print(x[,"from.id"])
    },
  split(x = pfad, f = 1:nrow(pfad)),
  mc.cores = n.cores)

在您的示例中,您循环了一个 data.frame 而不是它的行。你也可以这样做:

parallel::mcmapply(function(x) print(x[[1]]),
                   list(pfad),
                   mc.cores = n.cores)

这里的循环是一个列表,然后将其提供给您的内部函数。

相关问题