我遇到的问题是* pply的具体操作(如申请或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
,但都失败了。有人请告诉我什么是正确的方法?
答案 0 :(得分:0)
这不是您想要的确切答案,但它显示了方向。 实际上,从您的问题中不清楚您实际想要什么,因为您没有显示所需的结果。您还应该包含创建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
答案 1 :(得分:0)
在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
或在Map
base R
dlt[] <- Map(`*`, dlt, freq)