我使用 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
如何访问单个值?
答案 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)
这里的循环是一个列表,然后将其提供给您的内部函数。