如何在R中遍历mapply?

问题描述

我正在尝试使用R中的mapply函数来连接字符串。但是,我希望其中一个字符串在mapply函数中是可变的。我的代码片段如下:

strings<-data.frame(x=c("dsf","sdf","sdf"))
strings2<-data.frame(extension=c(".csv",".json",".xml"))

for (i in 1:3)
{
  strings_concat<-mapply(function(string1,string2) paste0(string1,string2),strings$x,strings2$extension[i])%>%
    data.frame()%>%
    unlist()%>%
    data.frame()

 #dosomething with strings_concat
}

但这只是给我最后一次迭代

strings_concat

dsf.xml
sdf.xml
sdf.xml

破产,所需的输出如下:

strings_concat

dsf.csv 
sdf.csv 
sdf.csv 

dsf.json 
sdf.json 
sdf.json 

dsf.xml
sdf.xml
sdf.xml

在每次迭代中,我都想将strings_concat与另一个数据帧合并并保存。如果在R中有一种简便的方法可以帮助我吗?

解决方法

也许outer在这里是更好的选择:

strings_concat <- c(outer(strings$x,strings2$extension,paste0))
strings_concat
#[1] "dsf.csv"  "sdf.csv"  "sdf.csv"  "dsf.json" "sdf.json" "sdf.json" 
#    "dsf.xml"  "sdf.xml"  "sdf.xml" 

您可以将其添加到data.frame中:

df <- data.frame(strings_concat)

如果要在每次迭代中添加一些其他步骤,可以使用lapply

lapply(strings2$extension,function(x) {
  strings_concat <- paste0(strings$x,x)
  #do something with strings_concat
})
,

所有您需要做的就是确保您不断扩充数据集。所以我认为这应该可以解决问题:

strings<-data.frame(x=c("dsf","sdf","sdf"))
strings2<-data.frame(extension=c(".csv",".json",".xml"))

# We are going to keep adding things to results
results = NULL

for (i in 1:3)
{
  strings_concat<-mapply(function(string1,string2) paste0(string1,string2),strings$x,strings2$extension[i])%>%
    data.frame()%>%
    unlist()%>%
    data.frame()
 # Here is where we keep adding things to results
 results = rbind(results,strings_concat)
}

print(results)

警告:不要放在带有R的计算机前面,因此该代码未经测试