กำหนดชื่อให้กับองค์ประกอบเวกเตอร์ของรายการใน R

Aug 19 2020

ฉันสงสัยว่าเราสามารถกำหนดชื่อให้กับองค์ประกอบเวกเตอร์แต่ละรายการในผลลัพธ์ของฟังก์ชันfooด้านล่างได้หรือไม่?

ตัวอย่างด้านล่างให้องค์ประกอบของ$pubsชื่อ: "pubs_-1SD", "pubs_+1SD"และองค์ประกอบของ$timeชื่อ: "time_-1SD", "time_+1SD"?

data <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/salary.csv')

foo <- function(data, vars) lapply(data[,vars], function(x) mean(x) + c(-1, 1)*sd(x))

foo(data, c("pubs", "time")) # EXAMPLE OF USE

# $pubs # [1] 5.348203 33.909862 ## `"pubs_-1SD"` and `"pubs_+1SD" # $time
# [1]  3.312931 12.848359 ## `"time_-1SD"` and `"time_+1SD"`

คำตอบ

4 RonakShah Aug 19 2020 at 06:15

คุณสามารถส่งชื่อคอลัมน์sapplyและกำหนดชื่อโดยใช้setNames:

foo <- function(data, vars) sapply(vars, function(x) 
  setNames(mean(data[[x]]) + c(-1, 1)*sd(data[[x]]), 
           paste0(x, '_', c('-', '+'), '1SD')), simplify = FALSE)

foo(data, c("pubs", "time"))

#$pubs #pubs_-1SD pubs_+1SD # 5.348203 33.909862 #$time
#time_-1SD time_+1SD 
# 3.312931 12.848359 
1 akrun Aug 19 2020 at 21:53

เราสามารถใช้ Map

foo <- function(data, vars) {
          
           Map(function(x, y) setNames(mean(x) + c(-1, 1)*sd(x), 
                sprintf('%s_%s1SD', rep(y, 2), c('-', '+'))), data[,vars], vars)
    }
     
    
     
foo(data, c("pubs", "time"))
#$pubs #pubs_-1SD pubs_+1SD # 5.348203 33.909862 #$time
#time_-1SD time_+1SD 
# 3.312931 12.848359