【问题标题】:Avoiding repetition in R避免在 R 中重复
【发布时间】:2015-04-05 15:06:49
【问题描述】:

这是我遇到的一个典型问题:

replace_letters <- function(string){
  gsub("x", "a", string)
}

string_x_new <- replace_letters("string_x")
string_y_new <- replace_letters("strxng_y")
string_z_new <- replace_letters("xstring_z")
...

意思是我正在编写一个函数(示例中的函数是任意的),然后我想将它应用于任意一组对象。有什么更简洁的方法可以做到这一点,而不必多次重复该函数(有时我有 10-15 次针对不同对象调用同一函数的长列表)?

【问题讨论】:

  • 为什么对象不在向量中?
  • 因为我是菜鸟。想说明一下吗?
  • chartr('x', 'a', strings) 在@CactusWoman 的回答中使用strings

标签: r function data-manipulation


【解决方案1】:

使用 c("string_x", "strxng_y", "xstring_z") 将字符串放入向量中,然后使用 apply 函数 示例:

strings<-c("string_x", "strxng_y", "xstring_z")

replace_letters <- function(string){
  gsub("x", "a", string)
}

strings <- sapply(strings, replace_letters)

【讨论】:

  • gsub("x","a",strings) 也有效(尽管您的回答说明了一种更普遍有效的方法)。
  • 是的,但我认为提问者正在寻找更一般的答案。这适用于 gsub,但不适用于所有功能
  • @Frank, @CactusWoman: 是的,gsub 不是问题的重点,而是如何避免手动多次调用函数
【解决方案2】:

您可以创建要应用该函数的对象的向量。举个例子吧:

new.strings <- sapply(c("string_x", "string_y", "string_z"), replace_letters)

【讨论】:

    【解决方案3】:

    你可以利用 R 的向量化:

    strings<-c("string_x", "strxng_y", "xstring_z")
    replace_letters(strings)
    ## [1] "string_a"  "strang_y"  "astring_z"
    

    【讨论】:

    • 这是否意味着其他人提出的sapply是不必要的?
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多