मेरे पास इस तरह एक लूप है:

library(writexl)
file_output="C:/test/test.xlsx"
for(i in 1:2){
    df<-iris[i,]
    write_xlsx(list(i=df),file_output)
    }

मैं प्रत्येक पुनरावृत्ति को i के मान नामक एक अलग शीट में संग्रहीत करना चाहता हूं (या मेरे वास्तविक कार्यक्रम में: कुछ चर का मान)। क्या यह write_xlsx के साथ संभव है, या सामान्य रूप से, क्या यह व्याख्या करने के लिए write_xlsx (या कुछ अन्य फ़ंक्शन) बनाना संभव है:

"सूची (i = df)" के रूप में "सूची (1 = df)" और "सूची (2 = df)"

1
Helen 1 मार्च 2019, 11:35

2 जवाब

सबसे बढ़िया उत्तर

i = df के बजाय आपको सूची तत्वों का नाम देना चाहिए। आपके लूप के लिए इसका मतलब होगा:

file_output = "C:/test/test.xlsx"
for(i in 1:2){
  df <- iris[i,]
  out <- list(df)
  names(out) <- i
  write_xlsx(out, file_output)
}

हालांकि, इसका परिणाम प्रति डेटा.फ्रेम में एक फ़ाइल के रूप में होगा, क्योंकि write_xlsx मौजूदा फ़ाइलों (कम से कम मेरी जानकारी के लिए) में संलग्न नहीं होता है। यदि आप विभिन्न डेटा फ्रेम के लिए शीट वाली केवल एक फ़ाइल रखना चाहते हैं, तो आपको अपना कोड अनुकूलित करना होगा:

file_output = "C:/test/test.xlsx"
vars <- 1:2
out <- vector(mode = "list", length = length(vars))
for(i in vars){ # if you use variable names in vars, use seq_along(vars) instead of vars
  out[[i]] <- iris[i,]
}
names(out) <- vars
write_xlsx(out, file_output)

चूंकि मुझे यहां लूप का उपयोग करने में कोई योग्यता नहीं दिख रही है, इसलिए मैं purrr पैकेज या lapply से map का उपयोग करने का सुझाव भी दूंगा:

file_output = "C:/test/test.xlsx"
vars <- 1:2
out <- map(vars, ~ iris[.x,])
names(out) <- vars
write_xlsx(out, file_output)
1
ha_pu 1 मार्च 2019, 12:22

इसके लिए आपको शायद लूप की आवश्यकता नहीं है।

शीट्स को नाम देने के लिए list ऑब्जेक्ट as.character() पर बस names() का उपयोग करें।

l <- lapply(1:2, function(i) iris[i, ]) #creates separated df for each row
names(l) <- as.character(1:2) # sets the names of each element in the list
# these will be the sheets name


file="path_to_file.xlsx" # path to file name
library(writexl)

write_xlsx(l, file)
1
RLave 1 मार्च 2019, 12:21