gpt4 book ai didi

r - 将数据框列名设置为字符串,即将字符类型切换为 "programming language"类型?

转载 作者:行者123 更新时间:2023-12-04 07:44:24 26 4
gpt4 key购买 nike

我不知道如何很好地描述标题中的这个问题。作为一个任意的例子,我创建了一个函数来创建一个向量的数据框,它的参数应该是新数据框的列名。但是,当我运行该函数时,它返回“字符串”作为数据帧列名,而不是“character_string”作为列名。非常简单,我知道发生了什么,只是我似乎无法找到合适的 R 函数来帮助我实现这一目标。

func <- function(string){
vec <- 1:5
df <- data.frame(string = vec)
return(df)
}

df <- func("character_string")
df
string
1 1
2 2
3 3
4 4
5 5
这是另一个例子,
func2 <- function(statement){
df <- data.frame(col1 = 1:5, col2 = 5:10)
flag <- FALSE
if(statement){
flag <- TRUE
}
return(flag)
}

func2("df[1,1] == 1")
这显然会返回一个错误,我需要 func2返回 flagTRUE .这似乎是一种非常奇怪的做事方式,但我只是想将这个概念围绕在其他一些应用程序中。

最佳答案

问题的第一部分:您可以使用 setNames()names(x) <- ""更改 data.frame 的名称创建后。

func <- function(string){
vec <- 1:5
df <- data.frame(string = vec)
setNames(df, string)
}

func("character_string")
#> character_string
#> 1 1
#> 2 2
#> 3 3
#> 4 4
#> 5 5
tidyverse 允许您在创建时使用函数参数的值作为变量的名称。见 here有关更多信息。
library(tidyverse)
func_b <- function(string){
vec <- 1:5
tibble({{string}} := vec)
}

func_b("character_string")
#> # A tibble: 5 x 1
#> character_string
#> <int>
#> 1 1
#> 2 2
#> 3 3
#> 4 4
#> 5 5
您问题的第二部分: eval() 的组合和 parse()允许您评估作为文本字符串提供的条件。
func2 <- function(statement){
df <- data.frame(col1 = 1:5, col2 = 6:10)
eval(parse(text = statement))
}

func2("df[1,1] == 1")
#> [1] TRUE
如果您想在比较语句上调用函数并确保该语句针对函数环境进行评估,这意味着:您不要在比较语句周围加上引号,请使用 substiture()eval()如下。
func2_b <- function(statement){
df <- data.frame(col1 = 1:5, col2 = 6:10)
eval(substitute(statement))
}

func2_b(df[1,1] == 1)
#> [1] TRUE

关于r - 将数据框列名设置为字符串,即将字符类型切换为 "programming language"类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67269631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com