如何使用 *pply 函数将数据帧和向量映射到函数参数
how to map a dataframe and vectors into function parameters with *pply functions
我遇到的问题是针对*pply的具体操作(比如apply或者mapply等,我不确定)。
数据框是dlt
:
dlt.1 dlt.2 dlt.3 dlt.4 dlt.5
1 3.244198 6.482869 9.711874 12.92918 16.13489
6 3.196401 6.391871 9.585553 12.77681 15.96547
19 3.182911 6.365424 9.547196 12.72799 15.90795
24 3.164079 6.328089 9.491971 12.65577 15.81984
向量是freq
:
1 2 3 4 5
现在我打算将 dt
和 freqn
映射到函数 foo
:
foo <- function( dlti, freqi){ dlti * freqi }
我希望 dlt
的第 i 列对应于 freq
的第 i 个元素
我尝试了 apply
和 mapply
,但都失败了。谁能告诉我什么是正确的方法?
这不是您想要的确切答案,但它指明了方向。
实际上,从你的问题中并不清楚你真正想要什么,因为你没有显示出想要的结果。您还应该包含创建 data.frame 的代码。否则,您的问题就会含糊不清。所以不要对我的答案投反对票,因为它没有回答你的问题。
dlt <- tribble(
~dlt_1, ~dlt_2, ~dlt_3, ~dlt_4, ~dlt_5 ,
3.244198, 6.482869, 9.711874, 12.92918, 16.13489,
3.196401, 6.391871, 9.585553, 12.77681, 15.96547,
3.182911, 6.365424, 9.547196, 12.72799, 15.90795,
3.164079, 6.328089, 9.491971, 12.65577, 15.81984
)
freqi <- c(1,2,3,4,5)
foo <- function(dlti,freqi){dlti * freqi}
purrr::map2(dlt,freqi,foo)
$dlt_1
[1] 3.244198 3.196401 3.182911 3.164079
$dlt_2
[1] 12.96574 12.78374 12.73085 12.65618
$dlt_3
[1] 29.13562 28.75666 28.64159 28.47591
$dlt_4
[1] 51.71672 51.10724 50.91196 50.62308
$dlt_5
[1] 80.67445 79.82735 79.53975 79.09920
在base R
中,我们可以通过复制'freq'然后执行*
来做到这一点
dlt*freq[col(dlt)]
# dlt.1 dlt.2 dlt.3 dlt.4 dlt.5
#1 3.244198 12.96574 29.13562 51.71672 80.67445
#6 3.196401 12.78374 28.75666 51.10724 79.82735
#19 3.182911 12.73085 28.64159 50.91196 79.53975
#24 3.164079 12.65618 28.47591 50.62308 79.09920
或在base R
中使用Map
dlt[] <- Map(`*`, dlt, freq)
我遇到的问题是针对*pply的具体操作(比如apply或者mapply等,我不确定)。
数据框是dlt
:
dlt.1 dlt.2 dlt.3 dlt.4 dlt.5
1 3.244198 6.482869 9.711874 12.92918 16.13489
6 3.196401 6.391871 9.585553 12.77681 15.96547
19 3.182911 6.365424 9.547196 12.72799 15.90795
24 3.164079 6.328089 9.491971 12.65577 15.81984
向量是freq
:
1 2 3 4 5
现在我打算将 dt
和 freqn
映射到函数 foo
:
foo <- function( dlti, freqi){ dlti * freqi }
我希望 dlt
的第 i 列对应于 freq
我尝试了 apply
和 mapply
,但都失败了。谁能告诉我什么是正确的方法?
这不是您想要的确切答案,但它指明了方向。 实际上,从你的问题中并不清楚你真正想要什么,因为你没有显示出想要的结果。您还应该包含创建 data.frame 的代码。否则,您的问题就会含糊不清。所以不要对我的答案投反对票,因为它没有回答你的问题。
dlt <- tribble(
~dlt_1, ~dlt_2, ~dlt_3, ~dlt_4, ~dlt_5 ,
3.244198, 6.482869, 9.711874, 12.92918, 16.13489,
3.196401, 6.391871, 9.585553, 12.77681, 15.96547,
3.182911, 6.365424, 9.547196, 12.72799, 15.90795,
3.164079, 6.328089, 9.491971, 12.65577, 15.81984
)
freqi <- c(1,2,3,4,5)
foo <- function(dlti,freqi){dlti * freqi}
purrr::map2(dlt,freqi,foo)
$dlt_1
[1] 3.244198 3.196401 3.182911 3.164079
$dlt_2
[1] 12.96574 12.78374 12.73085 12.65618
$dlt_3
[1] 29.13562 28.75666 28.64159 28.47591
$dlt_4
[1] 51.71672 51.10724 50.91196 50.62308
$dlt_5
[1] 80.67445 79.82735 79.53975 79.09920
在base R
中,我们可以通过复制'freq'然后执行*
dlt*freq[col(dlt)]
# dlt.1 dlt.2 dlt.3 dlt.4 dlt.5
#1 3.244198 12.96574 29.13562 51.71672 80.67445
#6 3.196401 12.78374 28.75666 51.10724 79.82735
#19 3.182911 12.73085 28.64159 50.91196 79.53975
#24 3.164079 12.65618 28.47591 50.62308 79.09920
或在base R
Map
dlt[] <- Map(`*`, dlt, freq)