R: write_xlsx 参数中存在评估问题
R: write_xlsx with evaluation problem in argument
我有一个这样的循环:
library(writexl)
file_output="C:/test/test.xlsx"
for(i in 1:2){
df<-iris[i,]
write_xlsx(list(i=df),file_output)
}
我想将每个迭代存储在一个单独的 sheet 中,命名为 i 的 value(或者在我的真实程序:某个变量的值)。 write_xlsx 是否有可能,或者一般来说,是否有可能使 write_xlsx(或其他一些函数)解释:
"list(i=df)" as "list(1=df)" and "list(2=df)"
您可能不需要 for 循环。
只需在 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)
您必须命名列表元素,而不是 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)
}
但是,这将导致每个 data.frame 一个文件,因为 write_xlsx
不会附加到现有文件(至少据我所知)。如果您只想拥有一个包含各种 data.frame 表格的文件,则必须调整您的代码:
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
包中的 map
或 lapply
:
file_output = "C:/test/test.xlsx"
vars <- 1:2
out <- map(vars, ~ iris[.x,])
names(out) <- vars
write_xlsx(out, file_output)
我有一个这样的循环:
library(writexl)
file_output="C:/test/test.xlsx"
for(i in 1:2){
df<-iris[i,]
write_xlsx(list(i=df),file_output)
}
我想将每个迭代存储在一个单独的 sheet 中,命名为 i 的 value(或者在我的真实程序:某个变量的值)。 write_xlsx 是否有可能,或者一般来说,是否有可能使 write_xlsx(或其他一些函数)解释:
"list(i=df)" as "list(1=df)" and "list(2=df)"
您可能不需要 for 循环。
只需在 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)
您必须命名列表元素,而不是 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)
}
但是,这将导致每个 data.frame 一个文件,因为 write_xlsx
不会附加到现有文件(至少据我所知)。如果您只想拥有一个包含各种 data.frame 表格的文件,则必须调整您的代码:
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
包中的 map
或 lapply
:
file_output = "C:/test/test.xlsx"
vars <- 1:2
out <- map(vars, ~ iris[.x,])
names(out) <- vars
write_xlsx(out, file_output)