作为R中的向量的mapply内部函数的第二个参数

时间:2016-06-04 11:48:20

标签: r list vector mapply

我知道标题有点令人困惑,很抱歉。 首先是一些生成我们需要的数据的代码:

ng-repeat"n[0] in color"

好的,所以,我有一个函数some_function,它将data.frame和vector作为参数:

ref_variables=LETTERS[1:10]
# Function to generate one dataset
generate_df=function(){
row=100
d0=seq(1:100)
for (i in seq_along(ref_variables)){
  dtemp=sample(seq(1:row),row,TRUE)
  d0=data.frame(d0,dtemp)
}
d0[,1]=NULL
names(d0)=ref_variables
return(d0)
}

# Generating a list of dataset
list_of_df=lapply(seq(1:100),function (x){
  generate_df()
} )

# Générating a list of vectors
df_vector=sample(ref_variables,3,FALSE)
for (i in seq(2,100)){
tmp=sample(ref_variables,3,FALSE)
df_vector=rbind(df_vector,tmp)
}
list_of_vector <- split(df_vector, seq(nrow(df_vector)))

我有一个data.frame列表和一个向量列表。所以我想根据它们作为some_function参数的位置将data.frame映射到向量。特别是我想跑:

#Some function a data.frame and a vector as arguments
some_function=function(a_df,a_vector){
  return(a_df[,a_vector])
}

所以我决定使用mapply函数:

some_function(list_of_df[[1]],unlist(list_of_vector[[1]]))
some_function(list_of_df[[2]],unlist(list_of_vector[[2]]))
some_function(list_of_df[[3]],unlist(list_of_vector[[3]]))
and so on ...

但是,big_results的长度是300,但是,我只预计100。显然,结果不是我所期望的。有谁知道这里发生了什么以及如何解决它?

1 个答案:

答案 0 :(得分:1)

我们需要使用Map

r1 <- Map(function(x,y) x[,y], list_of_df, list_of_vector)
length(r1)
#[1] 100

mapplySIMPLIFY = FALSE

r2 <- mapply(function(x,y) x[,y], list_of_df, list_of_vector, SIMPLIFY=FALSE)
length(r2)
#[1] 100

Map只是mapply的包装选项SIMPLIFY=FALSE。当对象维度相同时会发生什么,它简化为mapply的矩阵,因为默认选项为SIMPLIFY = TRUE

r3 <- mapply(function(x,y) x[,y], list_of_df, list_of_vector)
length(r3)
#[1] 300

length的{​​{1}}是其尺寸的乘积,即

matrix