比R中的for循环更有效

比R中的for循环更有效,r,for-loop,R,For Loop,我想知道有没有比for循环更有效的方法来为数据帧中的新变量赋值。我有两个最近的例子: [1] 使用vwr软件包获取标准化Leveshtein距离: rst34$Levenshtein = rep(0, nrow(rst34)) for (i in 1:nrow(rst34)) { rst34$Levenshtein[i] = levenshtein.distance( as.character(rst34$target[i]), as.character(rst34$prime[

我想知道有没有比for循环更有效的方法来为数据帧中的新变量赋值。我有两个最近的例子:

[1] 使用vwr软件包获取标准化Leveshtein距离:

rst34$Levenshtein = rep(0, nrow(rst34))
for (i in 1:nrow(rst34)) {
    rst34$Levenshtein[i] = levenshtein.distance(
    as.character(rst34$target[i]), as.character(rst34$prime[i]))[[1]] /
    max(nchar(as.character(rst34$target[i])), nchar(as.character(rst34$prime[i]))
    )
}
[2] 从另一个变量提取子字符串:

rst34$Experiment = 'rst4'
for (i in 1:nrow(rst34)) {
    rst34$Experiment[i] = unlist(strsplit(as.character(rst34$subject[i]), '[.]'))[1]
}
另外,我认为两个示例中的初始化应该没有区别:

rst34$Levenshtein = rep(0, nrow(rst34))
rst34$Experiment = 'rst4'
非常感谢

类似于

rst34$Experiment = sapply(rst34$subject, function(element){
    unlist(strsplit(as.character(element), '[.]'))[1]
})

我希望能做到这一点。我没有您的数据,因此无法实际测试。

只有将nchar应用于字符变量才有意义,因此可能不需要as.character调用:

     rst34$Levenshtein <- 
           levenshtein.distance( rst34$target, rst34$prime) /
                                            pmax(nchar(rst34$target), 
                                                 nchar(rst34$prime ) )

rst34$Levenshtein我在包
vwr
中没有看到数据集rst34。它是从哪里来的,或者您有一个可复制的示例吗?对单个值重复调用
as.character
是非常低效的。您应该使用已经矢量化的函数,如
as.character
pmax